搜索引擎es-分词与搜索
本文只是简单说明一下分词与搜索的概念以及实现逻辑,具体细节不讨论
分词在搜索引擎中是一个重要概念
分词是搜索引擎存储数据和检索数据的基本单位,这里有三个重要点
1.存储:一段文本会被分词,以分词为单位存入搜索引擎
2.检索:搜索词也会被分词,然后分别与搜索引擎的数据匹配查找
3.基本单位:分词是基本单位
分词库就是分词的集合
中英分词与搜索过程
英文
1.在英文文本中,由于单词之间通常以空格作为自然分隔符,因此空格可以被视为一种基本的“分词器”,示例
一段文本为"goods moring abc",会被分词为 "goods" "moring" "abc"三个分词,
2.当搜索词为前面三个词的任意一个,都会检索出文本数据
中文
1.在中文文本中,汉字之间没有空格来明确地界定词语的边界,所以只能以中文分词工具(ik,jieba,hanlp等)来分词,示例
一段文本为"隔山撬是白首乌",会被分词为"隔山撬" "隔山" "撬" "白首乌" "白首"五个分词
2.当搜索词为前面五个分词的任意一个.都会检索出文本数据
那么,问题来了,如果我想通过搜索词为"g"就把上面英文文本搜索出来,或者我想通过搜索词为"隔"就把上面中文文本搜索出来如何实现
方式1.通过ngram分词器,即对分词再做拆分,比如"隔山撬"以min_gram=1(最小长度为1),max_gram=2(最大长度为2)拆分,会被拆分为"隔" "隔山" "山" "山撬"
这种方法也有局限:1.增加索引大小;2. n-gram 设置不当,可能会导致不准确的结果,这里不做具体讨论
方式2.(我采用的),将中文和英文拆分为以字符为单位,颗粒度最小
那么"隔山撬是白首乌" 会被拆分为 "隔" "山" "撬" "是" "白" "首" "乌" ,无论检索前面的任意组合都可以检索出数据,提升了数据检索出结果的能力
再对检索加一些权重,比如精确查询查询(term),短语匹配(match phrase)等,能满足大部分需求
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
2019-08-27 面对对象