沿用该文章里的数据https://www.cnblogs.com/MRLL/p/12691763.html

查询时发现,一模一样的name,但是相关度不一样

GET /z_test/doc/_search
{
"explain": false,
"query": {
"match_phrase": {
"name": "测试"
}
}
}

结果

{
"took" : ,
"timed_out" : false,
"_shards" : {
"total" : ,
"successful" : ,
"skipped" : ,
"failed" :
},
"hits" : {
"total" : ,
"max_score" : 0.5753642,
"hits" : [
{
"_index" : "z_test",
"_type" : "doc",
"_id" : "D4eQcnEBf_xjEc-wO9P0",
"_score" : 0.5753642,
"_source" : {
"name" : "测试123"
}
},
{
"_index" : "z_test",
"_type" : "doc",
"_id" : "2oeLcnEBf_xjEc-wFNK2",
"_score" : 0.5753642,
"_source" : {
"name" : "测试"
}
},
{
"_index" : "z_test",
"_type" : "doc",
"_id" : "_analyze",
"_score" : 0.45840853,
"_source" : {
"name" : "测试"
}
},
{
"_index" : "z_test",
"_type" : "doc",
"_id" : "qHeKcnEBvg5mZsCPxwX1",
"_score" : 0.3672113,
"_source" : {
"name" : "测试"
}
},
{
"_index" : "z_test",
"_type" : "doc",
"_id" : "AVSTcnEBjEFwhOIJHS0S",
"_score" : 0.33573607,
"_source" : {
"name" : "测试1"
}
}
]
}
}

查询文档后得知,在相关度分值的计算中有个属性为逆向文档频率,意思为该搜索字段在整个索引的文档里出现的频率,出现的越多所占分值权重越低

参照该文章https://blog.csdn.net/paditang/article/details/79098830

解决办法为用以下查询

GET /z_test/doc/_search?search_type=dfs_query_then_fetch
{
"explain": false,
"query": {
"match": {
"name": {"query": "测试"}
}
}
}
dfs_query_then_fetch意为使用全局的文档信息打分

默认查询参数为query then fetch
  • 发送查询到每个shard
  • 找到所有匹配的文档,并使用本地的Term/Document Frequency信息进行打分
  • 对结果构建一个优先队列(排序,标页等)
  • 返回关于结果的元数据到请求节点。注意,实际文档还没有发送,只是分数
  • 来自所有shard的分数合并起来,并在请求节点上进行排序,文档被按照查询要求进行选择
  • 最终,实际文档从他们各自所在的独立的shard上检索出来
  • 结果被返回给用户
dfs_query_then_fetch
  • 预查询每个shard,询问Term和Document frequency
  • 发送查询到每隔shard
  • 找到所有匹配的文档,并使用全局的Term/Document Frequency信息进行打分
  • 对结果构建一个优先队列(排序,标页等)
  • 返回关于结果的元数据到请求节点。注意,实际文档还没有发送,只是分数
  • 来自所有shard的分数合并起来,并在请求节点上进行排序,文档被按照查询要求进行选择
  • 最终,实际文档从他们各自所在的独立的shard上检索出来
  • 结果被返回给用户
延伸:
 
 
词频:查询字段出现的越多分数越高,如果不在意词在某个字段中出现的频次,而只在意是否出现过,则可以在字段映射中禁用词频统计:
PUT /my_index
{
"mappings": {
"doc": {
"properties": {
"name": {
"type": "string",
"index_options": "docs"
}
}
}
}
}
 

es搜索排序不正确的更多相关文章

  1. ES搜索排序,文档相关度评分介绍——Vector Space Model

    Vector Space Model The vector space model provides a way of comparing a multiterm query against a do ...

  2. ES搜索排序,文档相关度评分介绍——TF-IDF—term frequency, inverse document frequency, and field-length norm—are calculated and stored at index time.

    Theory Behind Relevance Scoring Lucene (and thus Elasticsearch) uses the Boolean model to find match ...

  3. ES搜索排序,文档相关度评分介绍——Field-length norm

    Field-length norm How long is the field? The shorter the field, the higher the weight. If a term app ...

  4. YII关联字段并带搜索排序功能

    1.简介 从接触yii框架到现在已经快有两个月了,但是自己对yii框架的了解程度并不是很深,并没有系统地去学习,仅仅只是在做项目的时候遇到不懂得知识才去翻手册. 在上一个项目中因为需要将关联的表的字段 ...

  5. 搜索实时个性化模型——基于FTRL和个性化推荐的搜索排序优化

    本文来自网易云社区 作者:穆学锋 简介:传统的搜索个性化做法是定义个性化的标签,将用户和商品通过个性化标签关联起来,在搜索时进行匹配.传统做法的用户特征基本是离线计算获得,不够实时:个性化标签虽然具有 ...

  6. 【python】Leetcode每日一题-搜索排序数组2

    [python]Leetcode每日一题-搜索排序数组2 [题目描述] 已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同. 在传递给函数之前,nums 在预先未知的某个下标 k( ...

  7. 从零搭建 ES 搜索服务(六)相关性排序优化

    一.前言 上篇介绍了搜索结果高亮的实现方法,本篇主要介绍搜索结果相关性排序优化. 二.相关概念 2.1 排序 默认情况下,返回结果是按照「相关性」进行排序的--最相关的文档排在最前. 2.1.1 相关 ...

  8. es定制排序搜索结果

    GET /company/employee/_search { "query": { "constant_score": { "filter" ...

  9. ES 搜索结果expalain 可以类似数据库性能调优来看排序算法的选择

    When we run a simple term query with explain set to true (see Understanding the Score), you will see ...

随机推荐

  1. niginx:duplicate MIME type "text/html" in nginx.conf 错误(转载)

    把nginx升级到最新以后,发现用原来的配置启动的时候会提示: duplicate MIME type "text/html" in /usr/local/nginx/conf/n ...

  2. JavaScript数组排序(冒泡排序、选择排序、桶排序、快速排序)

    * 以下均是以实现数组的从小到大排序为例 1.冒泡排序 先遍历数组,让相邻的两个元素进行两两比较 .如果要求小到大排:最大的应该在最后面,如果前面的比后面的大,就要换位置: 数组遍历一遍以后,也就是第 ...

  3. 前端视频直播技术总结及video.js在h5页面中的应用

    全手打原创,转载请标明出处:https://www.cnblogs.com/dreamsqin/p/12557070.html,多谢,=.=~ (如果对你有帮助的话请帮我点个赞啦) 目前有一个需求是在 ...

  4. 云CRM和本地CRM哪个更好

    现在CRM系统按照服务器部署方式的不同分为本地CRM和云CRM两种,本地CRM需要在企业内部部署服务器,而云CRM的服务器则是安装在云服务器上面,很多企业可能不知道应该选择云CRM还是本地CRM.下面 ...

  5. 如何在win10下使用Ubuntu中的crontab自动执行任务

    win10下如何下载ubuntu 1.打开Microsoft Store,搜索ubuntu,选择其一(我选了第一个),点击获取,耐心等待安装即可:   2.安装完成可在开始栏找到:   使用cront ...

  6. 【分布式锁】07-Zookeeper实现分布式锁:Semaphore、读写锁实现原理

    前言 前面已经讲解了Zookeeper可重入锁的实现原理,自己对分布式锁也有了更深的认知. 我在公众号中发了一个疑问,相比于Redis来说,Zookeeper的实现方式要更好一些,即便Redis作者实 ...

  7. 算法训练 瓷砖铺放 【递归】java

      算法训练 瓷砖铺放   时间限制:1.0s   内存限制:512.0MB     锦囊1 锦囊2 锦囊3 问题描述 有一长度为N(1<=N<=10)的地板,给定两种不同瓷砖:一种长度为 ...

  8. MySQL5.6 选项和变量整理

    MySQL5.6 选项和变量整理  --allow-suspicious-udfs 这个选项控制是否用户定义函数只有一个xxx符号用于主函数加载.默认,该选项是关闭并且只具有至少一个辅助符号的UDFs ...

  9. OpenCV-Python 轮廓:更多属性 | 二十四

    目标 在本章中,我们将学习 凸性缺陷以及如何找到它们 查找点到多边形的最短距离 匹配不同的形状 理论和代码 1. 凸性缺陷 我们看到了关于轮廓的第二章的凸包.从这个凸包上的任何偏差都可以被认为是凸性缺 ...

  10. Soldier and Number Game CodeForces - 546D 素因子数打表(素数筛的改造)

    题意: 输入 a 和 b(a>b),求a! / b!的结果最多能被第二个士兵给的数字除多少次. 思路: a! / b!肯定能把b!约分掉,只留下b+1~a的数字相乘,所以我们求b+1 ~ a的所 ...