![50d9fe531cd814c7bd479ceb9c204cec.png](https://i-blog.csdnimg.cn/blog_migrate/70333827ff53f493827bb00fb5aaf2cf.png)
导 读
上一篇的内容中,携宁着重介绍了基于Elasticsearch构建一套非结构化文档检索服务的架构,以及如何从功能上体现出人性化来满足各种用户的检索需求,其中包括了繁简体统一检索、同义词检索、高级检索、条件过滤、个性推荐、检索智能纠错、词典更新。而在本篇中,我们会换一个角度,从检索的结果出发,介绍如何优化检索召回率以及检索结果的排序;也就是如何过滤出用户想检索的内容,并且在不丢失满足条件的结果文档的前提下尽可能地把用户更关心的文档显示在更靠前用户更容易看到的位置。
01
提高文档召回率
召回率,在检索领域一般指“查全率”,是指从库中检索出的相关的信息量与总量的比率,通俗的来说就是实际被检出的占应该被检出的比值。我们一般使用召回率对检索能力进行标准考量,召回率越高代表检索能力越强。
1.1 索引文本与检索文本统一
索引与检索的统一,包括文本方面和分析器方面两个方面。
➡ 文本方面的统一:在索引阶段和检索阶段处理文本时需要有统一的标准,在文档检索问题上最常见的统一标准有 大小写统一 和 繁简体统一。由于倒排索引对字符敏感,大小写、繁简体这些微小差异都会造成检索的关键词无法在倒排索引中被找到的情况,并最终可能无法召回文档。
➡ 分析器方面的统一:索引分析器和检索分析器统一,在对同一句子进行分析处理后的关键词结果需要形成一个包含关系,即索引分析器分析得到的关键词结果集需要包含检索分析器分析得到的结果集,这样能够让 Match Phrase Query 的精准匹配更容易召回到一致的文档。通常情况下,在选择索引分析器时一般选择最大化细粒度分词(即句中所有可能的分词),并在选择检索分析器时选择NLP粗粒度分词(对句子保留语意的逻辑切分),然而很多分词器细粒度模式的分词结果并不会完全覆盖到粗粒度分词的结果,这样就会在短语匹配时对召回造成严重影响。