检索优化之——ES中文检索原理的理解

工作机会,需要对检索结果进行调优,从未接触过算法以及检索的我,开始阅读ES各种材料,无奈网络上的材料大多伴随着各种coding,对于没有代码背景的人来说实属难以理解。只能在各种材料中总结归纳,翻译成大白话。

1. ES的含义

英文全称:ElasticSearch。

含义:分布式、高扩展、高实时的搜索与数据分析引擎(来源百度百科,抽象)

2. ES中文检索的过程


以下分别介绍每个过程中的关键点

(1)存储过程

在存储过程中,ES会根据要进行检索的字段,对存储内容进行拆词存储,并形成索引。ES有两种拆词方法(ik_max_word,和ik_smart方法名字百度出来的,非专业)。一种粗粒度,一种细粒度,两种方法的拆分结果示例如下:

数据:百度在线有限公司

粗粒度分词:百度、在线、有限公司

细粒度分词:百度、百、度、在线、有限公司、有限、有、限、公司

基本可以这样理解:粗粒度安装短语进行分词,细粒度不仅涵盖短语,还会拆分到字。细粒度分词虽然会占用更多的存储空间,但是好处是,在检索更细的词语或者单字也能有命中结果。

(2)检索拆词

检索拆词的过程与入库存储的分词过程一致,不再赘述。

检索内容拆出来的词会与存储过程中的分词索引进行快速匹配,匹配到了即可展示出检索结果。

(3)检索排序

在检索匹配条数很多的情况下,优先展示哪条结果呢?这里就要使用相关性计算来进行打分判断了,相关性越高,会展示地越靠前。

相关性得分的判断依据(TF/IDF 相似度算法)如下:

A:检索词频率 。检索词在该字段出现的频率,出现频率越高,相关性也越高。 字段中出现过 5 次要比只出现过 1 次的相关性高。(重要的事情说三遍,大概就是这个意思吧)

B:反向文档频率 。每个检索词在索引中出现的频率,频率越高,相关性越低。检索词出现在多数文档中会比出现在少数文档中的权重更低。(供给量越大价格越低,符合经济学原理)

C:字段长度准则 。字段的长度是多少,长度越长,相关性越低。 检索词出现在一个短的 title 要比同样的词出现在一个长的 content 字段权重更大。(惜字如金,描述这里很恰当)

依据此仨原则,会计算出一个得分_score。检索排序顺序自然按照这个得分由高到低排列。

这个规则看起来既符合常识又符合经济学原理,但是,在实际使用中却不一定能得到最好的效果,所以,"科学家们"又发明了可以干预得分的一些方法和函数(百度一下,资源丰富,全是coding,😓),可以根据业务的需要来对_score进行一定程度的调整。这样,保证排序效果。


以上,就是ES中文检索的白话原理了。下一篇,跟我一起在实践中检验真理吧!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容