当前位置:首页 > 科技  > 软件

Elasticsearch 电商场景:明明有这个关键词,但是搜不出来,怎么办?

来源: 责编: 时间:2024-05-16 09:08:51 231观看
导读1、实战问题场景:电商创业公司(非传统巨头)读者描述需求:content是一个text类型,用的 ik_max_word 分的词,需要根据关键词做精准匹配,并且按照发布时间倒序。比如我搜:小米6s,搜出来的结果要精确匹配到:小米6s,并且按照用户的发

1、实战问题

  • 场景:电商创业公司(非传统巨头)
  • 读者描述需求:

content是一个text类型,用的 ik_max_word 分的词,需要根据关键词做精准匹配,并且按照发布时间倒序。26P28资讯网——每日最新资讯28at.com

比如我搜:小米6s,搜出来的结果要精确匹配到:小米6s,并且按照用户的发布时间倒序排序。26P28资讯网——每日最新资讯28at.com

现在的问题是用 match_pharse 搜索的时候,有时候文档里明明有这个关键词,但是搜不出来,尝试了好几种手段......26P28资讯网——每日最新资讯28at.com

熟悉咱们公众号推文的同学应该知道,咱们分别在 2018年、2020年、2022年 都做过多次类似问题的讨论。26P28资讯网——每日最新资讯28at.com

探究 | 明明存在,怎么搜索不出来呢?26P28资讯网——每日最新资讯28at.com

Elasticsearch能检索出来,但不能正确高亮怎么办?26P28资讯网——每日最新资讯28at.com

由 Elasticsearch 空间换时间的线上问题说开去......26P28资讯网——每日最新资讯28at.com

2、重新梳理一下检索认知

2.1 分词和词典的本质

数据索引化的过程是借助分词器完成的,如读者的分词器是 IK 中文分词器。26P28资讯网——每日最新资讯28at.com

问题来了?IK 中文分词器能包含全部的词汇吗?26P28资讯网——每日最新资讯28at.com

大家看 medcl 大佬开源的 IK 分词器的源码中能找到 main.dic 大小是 2.92 MB。并且这个词典 8 年+ 没有更新过。26P28资讯网——每日最新资讯28at.com

图片图片26P28资讯网——每日最新资讯28at.com

显然:IK 默认词典覆盖不了全部词汇,尤其诸如“显眼包”、“小米14”、“奥利给”、“叶氏那拉”等的新词。如下截图是我自定义的词典的词库检索截图。26P28资讯网——每日最新资讯28at.com

图片图片26P28资讯网——每日最新资讯28at.com

再来一波举例看看:26P28资讯网——每日最新资讯28at.com

PUT my_index_0512{  "mappings": {    "properties": {      "title": {        "type": "text",        "analyzer": "ik_smart",        "fields": {          "keyword": {            "type": "keyword"          }        }      }    }  }}
POST my_index_0512/_bulk{"index":{"_id":1}}{"title":"奥利给是一个网络流行词,第一次出现在一名快手主播直播时说的正能量语录里。"}## 分词为:“奥利” 和 “给” 两个词POST my_index_0512/_analyze{  "text":"奥利给是一个网络流行词,第一次出现在一名快手主播直播时说的正能量语录里。",  "analyzer":"ik_smart"}## 检索不能召回结果,这里用 term 主要说明问题,合理性待商榷!POST my_index_0512/_search{  "profile": true,   "query": {    "term": {      "title": "奥利给"    }  }}

图片图片26P28资讯网——每日最新资讯28at.com

结论:词典决定分词,词典里没有的词,极大可能(有一定概率,比如:match_phrase 词+词组合的情况)检索会检索不到。26P28资讯网——每日最新资讯28at.com

ps: 关于 term、match、match_phrase 区别等,推荐阅读:检索选型。26P28资讯网——每日最新资讯28at.com

26P28资讯网——每日最新资讯28at.com

2.2 全文检索的本质

全文检索的本质是查询待检索的关键词在写入所创建的索引中是否存在的过程。26P28资讯网——每日最新资讯28at.com

存在,则召回;不存在,则返回空。26P28资讯网——每日最新资讯28at.com

2.3 明明有这个关键词,但是搜不出来的本质

表面上可以看出,之前咱们2018年、2020年、2022年讨论的方案用 match、match_phrase、match_phrase_prefix 等再结合 slop,貌似能解决一些问题,好像有些不召回的情况,可以召回了。26P28资讯网——每日最新资讯28at.com

但,依然治标不治本。依然会存在一些“新词”、“词典里没有的词”等看似明明一段话里存在的词,就是检索不到的原因。26P28资讯网——每日最新资讯28at.com

3、能不能根治呢?

答案:不完全能!26P28资讯网——每日最新资讯28at.com

但,可以尝试空间换时间,借助 Ngram 能解决 99% 以上场景的问题。26P28资讯网——每日最新资讯28at.com

针对读者的问题,借助 Ngram 分词实操一下:26P28资讯网——每日最新资讯28at.com

### 3.1 创建索引DELETE new_spy_uat2PUT new_spy_uat2{  "settings": {    "index.max_ngram_diff": 10,    "analysis": {      "analyzer": {        "my_analyzer": {          "tokenizer": "my_tokenizer",          "char_filter": ["my_char_filter"]        }      },      "char_filter": {        "my_char_filter": {          "type": "pattern_replace",          "pattern": "[^//p{L}//p{N}//s]+",          "replacement": ""        }      },      "tokenizer": {        "my_tokenizer": {          "type": "ngram",          "min_gram": 2,          "max_gram": 10        }      }    }  },  "mappings": {    "properties": {      "content": {        "type": "text",        "analyzer": "my_analyzer",        "fields": {          "keyword": {            "type": "keyword"          }        }      }    }  }}

在提供的 Elasticsearch 配置中,my_tokenizer 是一个基于 n-gram 的分词器,配置了从最小 2 个字符到最大 10 个字符的 n-gram。26P28资讯网——每日最新资讯28at.com

在《一本书讲透 Elasticsearch》第6.4 章节 P111 解读了自定义分词器的三大核心组成:26P28资讯网——每日最新资讯28at.com

  • character filter
  • tokenizer
  • token filter

咱们上面的“my_char_filter”定义了文本在分词前进行预处理的字符过滤规则。实际是使用正则表达式删除所有非字母、非数字、非空格字符,只保留字母、数字和空白字符,中文字符是可以保留的。26P28资讯网——每日最新资讯28at.com

N-gram 是一种分词方法,通过从文本中提取 n 个连续字符的滑动窗口来创建词元(tokens)。这种方法在处理需要部分匹配和模糊搜索的应用中非常有用,比如搜索建议和拼写错误的容错处理。26P28资讯网——每日最新资讯28at.com

在这种配置下,文本会被分解成所有可能的 2 到 10 个字符的组合。26P28资讯网——每日最新资讯28at.com

例如,要执行如下检索:26P28资讯网——每日最新资讯28at.com

POST new_spy_uat2/_analyze{  "analyzer":"my_analyzer",  "text":"奥利给这几年才流行"}

分词结果如下:26P28资讯网——每日最新资讯28at.com

图片图片26P28资讯网——每日最新资讯28at.com

这种方法可以大大增加索引的大小因为每个词都被分解成多个子词,但同时也提高了搜索的灵活性和准确性,尤其是在搜索短文本或关键词片段时。26P28资讯网——每日最新资讯28at.com

26P28资讯网——每日最新资讯28at.com

这样的分词器尤其适合于搜索引擎的自动补全功能和处理用户可能的输入错误,因为它能够在用户输入部分信息时就开始匹配相关的词条。26P28资讯网——每日最新资讯28at.com

3.2 导入数据

POST new_spy_uat2/_bulk{ "index" : { "_index" : "new_spy_uat2", "_id" : "1" } }{ "content" : "新品豪车❗️限1000单食物链巴氏小仙包犬湿粮360g 
                

本文链接:http://www.28at.com/showinfo-26-88368-0.htmlElasticsearch 电商场景:明明有这个关键词,但是搜不出来,怎么办?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 一文彻底搞明白中介模式

下一篇: 定时任务轻松搞定:使用Cron表达式和Quartz库实现定时任务调度

标签:
  • 热门焦点
  • 帅气纯真少年!日本最帅初中生选美冠军出炉

    日本第一帅哥初一生选美大赛冠军现已正式出炉,冠军是来自千叶县的宗田悠良。日本一直热衷于各种选美大赛,从“最美JK”起到“最美女星&r
  • 0糖0卡0脂 旭日森林仙草乌龙茶优惠:15瓶到手29元

    旭日森林无糖仙草乌龙茶510ml*15瓶平时要卖为79.9元,今日下单领取50元优惠券,到手价为29.9元。产品规格:0糖0卡0脂,添加草本仙草汁,清凉爽口,富含茶多酚,保留
  • 让我们一起聊聊文件的操作

    文件【1】文件是什么?文件是保存数据的地方,是数据源的一种,比如大家经常使用的word文档、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存数据,它既可以保
  • 之家push系统迭代之路

    前言在这个信息爆炸的互联网时代,能够及时准确获取信息是当今社会要解决的关键问题之一。随着之家用户体量和内容规模的不断增大,传统的靠"主动拉"获取信息的方式已不能满足用
  • 三言两语说透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是两种很有用的技术,可以帮助我们写出更加优雅、泛用的函数。本文将首先介绍柯里化和反柯里化的概念、实现原理和应用
  • 多线程开发带来的问题与解决方法

    使用多线程主要会带来以下几个问题:(一)线程安全问题  线程安全问题指的是在某一线程从开始访问到结束访问某一数据期间,该数据被其他的线程所修改,那么对于当前线程而言,该线程
  • 苹果、三星、惠普等暂停向印度出口笔记本和平板电脑

    集微网消息,据彭博社报道,在8月3日印度突然禁止在没有许可证的情况下向印度进口电脑/平板及显示器等产品后,苹果、三星电子和惠普等大公司暂停向印度
  • 3699元!iQOO Neo8 Pro顶配版今日首销:1TB UFS 4.0同价位唯一

    5月23日,iQOO推出了全新的iQOO Neo8系列,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更是首发搭载了联发科天玑9200+旗舰
  • Android 14发布:首批适配机型公布

    5月11日消息,谷歌在今天凌晨举行了I/O大会,本次发布会谷歌带来了自家的AI语言模型PaLM 2、谷歌Pixel Fold折叠屏、谷歌Pixel 7a手机,同时发布了Androi
Top