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

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

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

1、实战问题

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

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

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

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

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

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

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

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

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

2.1 分词和词典的本质

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

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

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

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

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

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

再来一波举例看看:wF328资讯网——每日最新资讯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": "奥利给"    }  }}

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

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

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

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

2.2 全文检索的本质

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

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

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

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

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

3、能不能根治呢?

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

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

针对读者的问题,借助 Ngram 分词实操一下:wF328资讯网——每日最新资讯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。wF328资讯网——每日最新资讯28at.com

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

  • character filter
  • tokenizer
  • token filter

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

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

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

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

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

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

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

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

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

这样的分词器尤其适合于搜索引擎的自动补全功能和处理用户可能的输入错误,因为它能够在用户输入部分信息时就开始匹配相关的词条。wF328资讯网——每日最新资讯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库实现定时任务调度

标签:
  • 热门焦点
  • 对标苹果的灵动岛 华为带来实况窗功能

    继苹果的灵动岛之后,华为也在今天正式推出了“实况窗”功能。据今天鸿蒙OS 4.0的现场演示显示,华为的实况窗可以更高效的展现出实时通知,比如锁屏上就能看到外卖、打车、银行
  • Java NIO内存映射文件:提高文件读写效率的优秀实践!

    Java的NIO库提供了内存映射文件的支持,它可以将文件映射到内存中,从而可以更快地读取和写入文件数据。本文将对Java内存映射文件进行详细的介绍和演示。内存映射文件概述内存
  • 企业采用CRM系统的11个好处

    客户关系管理(CRM)软件可以为企业提供很多的好处,从客户保留到提高生产力。  CRM软件用于企业收集客户互动,以改善客户体验和满意度。  CRM软件市场规模如今超过580
  • 三言两语说透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是两种很有用的技术,可以帮助我们写出更加优雅、泛用的函数。本文将首先介绍柯里化和反柯里化的概念、实现原理和应用
  • 为什么你不应该使用Div作为可点击元素

    按钮是为任何网络应用程序提供交互性的最常见方式。但我们经常倾向于使用其他HTML元素,如 div span 等作为 clickable 元素。但通过这样做,我们错过了许多内置浏览器的功能。
  • 雅柏威士忌多款单品价格大跌,泥煤顶流也不香了?

    来源 | 烈酒商业观察编 | 肖海林今年以来,威士忌市场开始出现了降温迹象,越来越多不断暴涨的网红威士忌也开始悄然回归市场理性。近日,LVMH集团旗下苏格兰威士忌品牌雅柏(Ardbeg
  • 本地生活这块肥肉,拼多多也想吃一口

    出品/壹览商业 作者/李彦编辑/木鱼拼多多也看上本地生活这块蛋糕了。近期,拼多多在App首页“充值中心”入口上线了本机生活界面。壹览商业发现,该界面目前主要
  • 三星显示已开始为AR设备研发硅基LED微显示屏

    7月18日消息,据外媒报道,随着苹果首款头显产品Vision Pro在6月份正式推出,AR/VR/MR等头显产品也就将成为各大公司下一个重要的竞争领域,对显示屏这一关
  • Windows 11发布,微软一改往常对老机型开放的态度

    距离 Windows 11 发布已经过去一周,在过去一周里,很多数码爱好者围绕其对 Android 应用的支持、对老机型的升级问题展开了激烈讨论。与以往不同的是,在这次大
Top