- 收藏
- 加入书签
Redisearch在私域电商生鲜农产品中的应用
摘 要:“私域电商”依托于微信号、社群等,通过社交建立用户信任,深度挖客户需求,根据不同的客户阶段分类做精细化运营,提升客户的长期价值。在设计小程序时,搜索功能是其中非常重要的一环。搜索功能承担着用户发掘商品的作用,因此能否准确地识别用户的意图并且准确地返回相应的商品就十分关键。搜索功能另一个要求是要快速返回,一般来说,用户在浏览超过35秒后若还是未找到目标商品将直接跳出。搜索功能还需要注重商品的相关性,提供相关度的商品能有效够吸引用户,提升用户黏度。
关键词:私域电商;redisearch;搜索功能
1 Redisearch应用于私域电商的背景
1.1私域电商的兴起
随着互联网的不断发展,电商的模式也在不断的更新。根据CNNIC的统计数据,近5年来典型电商平台销售及营销费用与年度活跃用户比值呈现不断增长的趋势,这既说明了用户维护及获取成本不断升高,也体现出流量红利增长空间有限,电商平台的获客成本越来越高,互联网人口红利见底,平台活跃用户增长乏力,用户移动互联网时长增速大幅下降等,商家在平台上可获取的利润越来越低,只能从别的地方寻找增长发力点。
以前的商业模型从公域引流量,然后引导转化,这种模式适合流量便宜的时候通过提升销量获取利润,但是流量成本一旦上涨就容易吃不消。流量采购成本高涨之后,重点就在于怎么去提升留存和复购来降低成本,怎么去提升用户的LTV(长期价值)。于是,私域电商应运而生。“私域电商”依托于微信号、社群等,通过社交建立用户信任,深度挖掘客户需求,根据不同的客户阶段分类做精细化运营,提升客户的长期价值。
1.2搜索引擎在私域电商中的作用
在培养客户的过程中,借助小程序隐性扁平化的入口、简单易用等特点,构建以小程序为核心的私域流量池。在设计小程序时,搜索功能是其中非常重要的一环。搜索功能承担着用户发掘商品的作用,因此能否准确的识别用户的意图并且准确地返回相应的商品就十分关键。搜索功能另一个要求是要快速返回,一般来说,用户在浏览超过35秒后若还是未找到目标商品将直接跳出。搜索功能还需要注重商品的相关性,提供相关度高的商品更能有效够吸引用户,提升用户黏度。
1.3 Redisearch在私域电商中的作用
Redisearch作为一个悄然崛起的开源搜素引擎,在如何将其运用于实际生活方面还存在着诸多的悬而未决问题,如何处理这些尚未解决的问题,将redisearch与具体的行业进行结合,聚焦于日常生活的难题,解决后端开发中搜索速度慢,结果精准度低的技术痛点,实现redisearch的真正价值。本文聚焦于私域电商的生鲜农产品领域,逐重探讨redisearch在私域电商方兴未艾的过程中能够发挥其作用于价值。
2 Redisearch应用介绍
2.1 Redisearch简介
RediSearch是一款基于 Redis 的开源全文搜索引擎,可以用于私域电商网站上。它可以帮助私域电商网站快速检索和搜索商品信息,并可以为商品提供全文索引功能,以及支持多种搜索的功能,包括关键词搜索、过滤搜索、索引搜索、模糊搜索等。 此外,RediSearch还支持自定义排序功能,可以依据不同的参数计算相关商品的排序,比如按照价格、销量和评价等。RediSearch还可以支持多种排序方式,比如升序排序、降序排序和混合排序等,可以为用户提供更多样化的搜索结果。
2.2 Redisearch功能简介
在RediSearch中,索引可以按照自定义的顺序进行组织,并且可以根据需要进行优化以支持更快的搜索性能。 在制作RediSearch索引之前,首先需要在Redis中创建一个新的索引。这可以通过在Redis命令行中输入以下命令来完成:FT.CREATE indexName schema fieldName1 sortable fieldName2 sortable ... 。其中,indexName是所创建索引的名称,schema是要添加到索引中的字段名称,sortable表示该字段是否可以进行排序,YES表示可以排序,NO表示不可以排序。 接下来,在创建好索引之后,就可以开始制作RediSearch索引。这可以通过使用Redis的FT.ADD命令来完成,该命令接受一个或多个参数,其中第一个参数必须是索引的名称,后面的参数则是要添加到索引中的文档。每个文档由一组键值对表示,其中每个键值对由一个字段名称和一个字段值组成,例如:FT.ADD indexName documentID fieldName1 fieldValue1 fieldName2 fieldValue2。在此命令中,documentID是文档的唯一标识符,fieldName1和fieldName2是文档中的字段名称,fieldValue1和fieldValue2则是文档中的字段值。 RediSearch还支持对文档中的字段进行索引,这样就可以进行更快的搜索。要实现这一目的,可以使用FT.INDEX命令,该命令接受两个参数,第一个参数是索引的名称,第二个参数是要索引的字段名称,例如:FT.INDEX indexName fieldName1 fieldName2。 最后,可以使用FT.SEARCH命令来搜索RediSearch索引。该命令接受三个参数,第一个参数是索引的名称,第二个参数是搜索关键词,第三个参数是要搜索的字段名称,例如:FT.SEARCH indexName searchKeyword fieldName1 fieldName2。 在制作RediSearch索引时,还可以使用一些额外的功能,例如可以使用FT.OPTIMIZE命令来优化索引,使搜索性能更快;可以使用FT.ALTER命令来修改索引中的字段;可以使用FT.DROP命令来删除索引;可以使用FT.INFO命令来查看索引的信息等等。 总之,制作RediSearch索引的步骤包括:首先在Redis中创建一个新的索引;然后使用FT.ADD命令将文档添加到索引中;接着使用FT.INDEX命令将文档中的字段进行索引;最后使用FT.SEARCH命令进行搜索。
制作索引的步骤如下:
1. 定义索引:使用RediSearch的FT.CREATE命令定义索引的名称、字段、数据类型等。
2. 加载数据:使用RediSearch的FT.ADD命令将数据添加到索引中。
3. 测试搜索:使用RediSearch的FT.SEARCH命令测试搜索关键字,以确保索引正常工作。
4. 优化索引:优化索引可以提高搜索速度,减少索引大小。
2.3 Friso中文分词
Redisearch使用friso对中文进行分词支持,Friso 是使用 c 语言开发的一款开源的高性能中文分词器,使用流行的mmseg算法实现。完全基于模块化设计和实现,可以很方便的植入其他程序中。
3 Redisearch搜索的设计
3.1 数据的导入
由于redisearch基于redis,而redis运行与内存之中,所以本文在研究时使用mysql存放持久性数据,在服务启动时,再将需要的数据从mysql加载到redis。本文将需要的数据分为以下两张数据表,即goodsInfo 和goodsCategory。goodsInfo 用来保存商品的详细数据,goodsCategory用来保存商品的分类信息。goodsInfo数据库包含以下字段。对于redisearch来说,搜索查找并不需要全部的商品数据,只需要将部分涉及到商品搜索的数据加载到redis,在满足搜索需要的同时,减轻redisearch的负担,提高运行效率。
3.2 数据模型的构建
鉴于加载到redis中的仅是部分数据,为了能够与mysql进行关联,以便在需要信息的时候快速查找,goodsId应当被加载到redis中。在搜索时,为了能够提高搜索的准确性、扩大搜索的覆盖范围,goodsName、goodsIntro、goodsTag这些可能包含搜索关键字,与搜索关键字高度相关的数据也应当被加载到redis中。当用户直接搜索商品名字或与商品相关的介绍时,程序需要从goodsName、和goodsIntro进行检索。当用户搜索商品的分类名时,goodsTag将起到作用。
当mysql中的部分数据被加载到redis中时,采用hset作为存储的类型,hset的命令如下: hset [key] [field] [value],将goodsId作为hset的key,将goodsName,goodsIntro、goodsTag等作为field,将具体的数据加载至value,恰倒好处的满足了搜索的需要。
3.3 中文词库的构建
Friso默认的通用中文词库内容往往较为陈旧,无法跟上互联网日新月异的发展,并且通用词库在处理生鲜农产品数量庞大的专有名词时,处理的效果也不尽如人意。因此在使用redisearh前,为了提高其搜索结果的准确性,需要使用与生鲜农产品高度相关的专业词库,以替代默认的通用词库,从而提高搜索结果的准确性,为用户提供更好的使用体验。
4 Redisearch搜索的实现
4.1 数据的创建与导入
在将mysql的数据导入redis时,为了实现mysql数据的自动导入,同时也为了更好的与express更好的结合,先使用js将数据从mysql中读取出来,再利用js进行数据加工,加工后再导入redis。先利用js的mysql模块与mysql建立连接,再利用js的redis模块与redis建立连接之后,利用js对从mysql中取出来的数据加工处理,最后将处理好的数据放入redis中。
1.const mysql = require("mysql");
2.const mysqlPool = mysql.createPool({
3. connectionLimit: 100,
4. host: "172.30.70.25",
5. port: "3306",
6. user: "wei",
7. password: "1234",
8. database: "Game"
9.});
1.const redis = require("redis");
2.const redisConnect = redis.createClient({
3. url: `redis://@${redisConf.host}:${redisConf.port}`
4.});
1. queryString("book", "abe")
2. .then(data => {
3. // console.log(data.hits.hits)
4. let resList = data.hits.hits;
5. let taskList = [];
6. for (let i = 0; i < resList.length; i++) {
7. taskList.push(rBookById(resList[i]._source.BookId))
8. }
9. Promise.all(taskList).then(result => {
10. for (let i = 0; i < result.length; i++) {
11. taskList.push(result[i][0])
12. }
13. console.log("taskList", taskList)
14. }).catch(error => {
15. console.log("error", error)
16. })
17. }).catch(error => {
18. console.error("error", error);
19. })
4.2 中文词库的构建
Redisearch默认使用的是friso中文分词器,为了提高其与生鲜农产品的相关度,需要对friso的词库进行配置。将准备好的中文词库按照要求放入特定的文件夹,再在friso.ini配置文件中将friso.lex_dir修改为所对应的文件路径,
Friso在运行时会读取配置文件并调用friso_init_from_ifile 函数解析配置文件,对程序进行初始化。
# relative path search (All system)
friso.lex_dir = $PATH;
4.3 自动补全功能测试
自动补全功能的测试
为了给用户一个更好的交互体验,在完成数据的创建与导入和中文词库的构建后,要实现自动补全功能,以减少用户查找产品的时间成本,提高用户的查找效率。先创建一个文档,FT.CREATE products_idx ON HASH PREFIX 1 "product:" SCHEMA title TEXT SORTABLE。创建完文档之后将数据加入到文档,FT.ADD products_idx product:1 1.0 FIELDS title "iPhone 12 Pro" FT.ADD products_idx product:2 1.0 FIELDS title "Samsung S21 Ultra" FT.ADD products_idx product:3 1.0 FIELDS title "OnePlus 9 Pro"。之后添加需要补全的字段,FT.SUGADD products_suggest iPhone FT.SUGADD products_suggest Samsung FT.SUGADD products_suggest OnePlus。最后执行自动补全,FT.SUGGET products_suggest iPhone COUNT 10。
结 论
Redisearch是一个基于Redis的全文搜索引擎,支持高性能、实时搜索。它利用Redis的存储能力和快速性能,提供了一个易于使用和高效率的全文搜索体验。Redisearch使用高效的红黑树数据结构,可以快速地索引、搜索和排序数据。它通过优化内存使用和I/O操作,实现了非常高的性能和吞吐量。Redisearch使用实时、近似权重、模糊搜索和自动建议等技术,为用户提供快速、准确的搜索结果。同时,它还支持自动完成和实时搜索建议等功能,这些功能能够提高用户体验。Redisearch支持文本分词、同义词、模糊搜索、前缀搜索、范围搜索、数据过滤等功能。这些功能能够满足各种搜索需求,并在应对海量数据时依然能够保持高效率。Redisearch可以以独立的模式运行,也可以作为Redis的一个模块运行。它还可以和多种语言(如Java、Python、Node.js等)进行集成,这些部署方式都很灵活、易于使用。
总之,Redisearch是一款灵活、可靠、高效的全文搜索引擎,可以为大型应用程序提供高效的搜索功能,它的优势在于高性能、实时搜索和强大的搜索功能,因此其在私域电商中具有巨大的潜力。
参考文献
[1] 吴丽芳. 基于私域流量的生鲜农产品微信社交电商模式研究[J].山东农业工程学院学报,2020,37(09): 29-33.
[2] 周俊宇,花洁骆,国铭. 一种电网领域数据的知识图谱搜索引擎构建[J].微型电脑应用,2023,39(02): 119-122.
作者简介:钱瑶, 2001年3月28日,女,汉,安徽芜湖,本科在读,学生,安徽省宿州学院商学院,安徽省宿州学院东校区;
刘伟,2002年3月12日,男,汉,安徽铜陵,本科在读,学生,安徽省宿州学院商学院;
基金:宿州学院国家级大学生创新创业训练计划项目资助“疫食代下电商助农消费扶贫——益周果蔬” (项目编号:202210379063S) 指导老师:杨宇晴




京公网安备 11011302003690号