搜索引擎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)等,能满足大部分需求

posted @   仁义礼智信的  阅读(106)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
历史上的今天:
2019-08-27 面对对象
点击右上角即可分享
微信分享提示