热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Elasticsearch实战学习笔记(七)Elasticsearch使用相关性进行搜索

Elasticsearch实战学习笔记系列Elasticsearch使用相关性进行搜索目录Elasticsearch实战学习笔记系列Elasticsearch使用相关性进行搜索

Elasticsearch实战学习笔记系列   Elasticsearch使用相关性进行搜索

目录

Elasticsearch实战学习笔记系列   Elasticsearch使用相关性进行搜索

一、Elasticsearch 的打分机制

1.TF-IDF逆文档频率

2.Lucene评分公式

二、其他打分方法

1.Okapi BM25

2.boosting

四、使用“解释”来理解文档是如何被评分的

五、实践

系列目录

Elasticsearch实战学习笔记(一) Elasticsearch介绍

Elasticsearch实战学习笔记(二) Elasticsearch环境搭建(Mac Docker)

Elasticsearch实战学习笔记(三) Elasticsearch深入功能

Elasticsearch实战学习笔记(四) Elasticsearch索引、更新和删除数据

Elasticsearch实战学习笔记(五) Elasticsearch搜索数据

Elasticsearch实战学习笔记(六) Elasticsearch分析数据

Elasticsearch实战学习笔记(七) Elasticsearch使用相关性进行搜索

Elasticsearch实战学习笔记(八) Elasticsearch文档间的关系




  • Elasticsearch的打分机制
  • 使用 提升机制(boosting)来直接影响打分
  • 使用解释 API 接口来理解得分是如何计算的
  • 使用查询再计分来减小原有打分机制的影响,使用功能打分查询来扩展查询,并使其具有对得分的终极控制权,以及使用脚本来自定义排序
  • 内存中的字段数据缓 存,它是如何影响用户的查询


一、Elasticsearch 的打分机制


1.TF-IDF逆文档频率

确定文档和查询有多么相关的过程被称为打分(scoring),Lucene的打分机制是一个公式,将考量的文档作为输入,使用不同的因素来确定该文档的得分


  • TF-IDF 逆文档频率,TF term frequency 词频, IDF inverse document frequency 逆文档频率

 

第一个句子提到 Elasticsearch 一次 ,而第二个句子提到 Elasticsearch 两次,所以包含第二句话的文档应该比包含第一句话的文档拥有更高的得分。按照数量来讨论,第一句话的
词频( TF )是 1,而第二句话的词频将是 2。

如果一个分词在索引的不同文档中出现越多的次数,那么它就越不重要。逆文档频率是一个重要的因素,用于平衡词条的词频。


  • 词条 Elasticsearch的文档频率是 2 (3篇中2篇出现),文档频率的逆源自得分乘以 1/DF,这里 DF是该词条的文档频率。词条拥有更高的文档频率, 它的权重就会降低。
  • 词条 the 的文档频率是 3 (3篇中都出现),尽管the在最后一篇文档中出现了两次,它的文档频率还是3。 因为逆文档频率只检查一个词条是否出现在某文档中,而不检查它出现多少次


2.Lucene评分公式


  • 词条的词频越高,得分越高
  • 索引中词条越罕见,逆文档频率越高




二、其他打分方法


  • Okapi BM25
  • 随机性分歧 (Divergence from randomness),即 DFR 相似度
  • 基于信息的 (Information based), 即lB相似度
  • LM Dirichlet相似度
  • LM Jelinek Mercer相似度


1.Okapi BM25


  • k1和 b 是数值的设置,用于调整得分是如何计算的
  • k1 控制对于得分而言词频的重要性
  • b 是介于 0 到 1之间的数值,它控制了文档篇幅对于得分的影响程度
  • 默认情况下, kl被设置为1.2,而b被设置为0.75


2.boosting

boosting 是一个可以用来修改文档的相关性的程序 。boosting 有两种类型,当索引或者查询文档的时候,可以提升一篇文档的得分。




四、使用“解释”来理解文档是如何被评分的

如何分解文挡的得分,从 Elasticsearch 的角度而言,这些对于理解为什么一篇文档 比另一篇更符合某个查询是非常有帮助的。这些被称为对得分进行解释( explaining),可以通过指定 explain=true 来告诉 Elasticsearch 运行这个操作 。

查询结果:

解释一篇文档不匹配的原因




五、实践


  • 特定的词条权重更高
  • 考虑了评论数据
  • 活动参与人数越多,排名越高
  • 靠近某个地理位置的活动得以 boost加权



系列目录

Elasticsearch实战学习笔记(一) Elasticsearch介绍

Elasticsearch实战学习笔记(二) Elasticsearch环境搭建(Mac Docker)

Elasticsearch实战学习笔记(三) Elasticsearch深入功能

Elasticsearch实战学习笔记(四) Elasticsearch索引、更新和删除数据

Elasticsearch实战学习笔记(五) Elasticsearch搜索数据

Elasticsearch实战学习笔记(六) Elasticsearch分析数据

Elasticsearch实战学习笔记(七) Elasticsearch使用相关性进行搜索

Elasticsearch实战学习笔记(八) Elasticsearch文档间的关系


推荐阅读
author-avatar
林泳_钿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有