养生 装修 购物 美食 感冒 便秘 营销 加盟 小吃 火锅 管理 创业 搭配 减肥 培训 旅游

ES学习--搜索的相关性和相关性得分的查看与调整

时间:2024-10-22 19:50:56

对信息检索工具来说,查全率,查准率与结果排序是考核其性能的3大指标,前两者更多与分词匹配相关,而后者则与相关性的判断与打分相关(基于打分结果排序),本篇经验就分享一下ElasticSearch中搜索相关性及打分的相关原理和操作。

工具/原料

ElasticSearch,Kibana

方法/步骤

1、ElasticSearch5.0版本前相关骂宙逃慈性判断及打分使用的算法是TF-IDF,5.0版本以后使用的是BM25算法。TF-IDF:TermFrequency,惺绅寨瞀InverseDocumentFrequency即词频和逆文档频率,TF=词项在文档出现次数/该文档总字数,IDF=log(索引文档总数量/词项出现的文档数量),简单来说,TF-IDF得分计算公式为:文档得分=TF(t)*IDF(t)*boost(t)*norm(t)t即查询串中每个词项,boost函数是ES提供的分数调整函数,norm函数根据文档长短返回一个值(文档短对应的值大)。BM25:整体而言就是对TF-IDF算法的改进,对于TF-IDF算法,TF(t)部分的值越大,整个公式返回的值就会越大,BM25针对针对这点进行来优化,随着TF(t)的逐步加大,该算法的返回值会趋于一个数值。图示,为索引指定自定义的相关性算法。

ES学习--搜索的相关性和相关性得分的查看与调整

2、使用explain查看搜索相关性分数的计算过程图1示:构建索引并添加3条文档信息图2示:搜索时,指定explain参数,在返回结果中包含相关性分数的计算细节

ES学习--搜索的相关性和相关性得分的查看与调整

ES学习--搜索的相关性和相关性得分的查看与调整

3、默认相关性算分排序初体验还是上面的索引和文档数据,查询elasticsearch,返回结果中,文档2获取的分数高于文档1(图示,文档2排在文档1前面),从上述公式中可以发现,导致这种算分差异就在于文档2的长度短于文档1。

ES学习--搜索的相关性和相关性得分的查看与调整

4、通过boostingquery嵌套搜索修改内层搜殇矬岭柳索结果的相关性得分先看一下boostingquery嵌套搜索的语法:GET惺绅寨瞀/myindex/_search{"query":{"boosting":{"positive":{嵌套子查询},"negative":{嵌套子查询},"negative_boost":调整权重}}}boosting嵌套查询以positive下的子查询来获取返回结果,negative中的子查询对上述结果的相关性打分进行调整,通过negative_boost参数指定的值:升权(>1),降权(>0and<1),减分(<0)

5、通过boostingquery嵌套term查询,降权处理相关性得分图1示,boostingquery中的positive下的term子查询获取包含词项elasticsearch的文档并给出相关性得分,negative下的term子查询对包含词项use的文档的得分进行降权调整(降权参数为0.2)图2示,查询结果,相比未进行调整,文档1的相关性得分高于文档2的得分

ES学习--搜索的相关性和相关性得分的查看与调整

ES学习--搜索的相关性和相关性得分的查看与调整

6、通过boostingquery嵌套match查询,升权相关性得分图示,boostingquery中的positive下的match子查询获取包含词项elasticsearch或者good的文档并给出相关性得分,negative下的match子查询对包含词项use的文档的得分进行升权调整(升权参数为2.5),查询结果中,文档2的相关性得分高于文档1的得分

ES学习--搜索的相关性和相关性得分的查看与调整

© 一点知识