沿用该文章里的数据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. 初学嵌入式Linux

    初学嵌入式Linux,感觉需要学习的东西太多了.把学习过程中的收获和问题记录在这里,算是一份经验吧.     前面利用开发板带的现成的东西step by step让Linux 2.4.19在开发板上跑 ...

  2. java 知识点总结(转)

    转载自 https://www.cnblogs.com/wl310538259/p/5218251.html (一)Java 1.接口和抽象类的区别 ①抽象类里可以有构造方法,而接口内不能有构造方法. ...

  3. C 2015年真题

    1.写出程序输出结果 void main() { char p[10]="abc"; char q[]="xyz"; int i,j; i=0; while(* ...

  4. 33. CentOS7 静态ip设置

    1.网络连接选择NAT模式: 2.关闭vmware的dhcp:选择编辑-->虚拟网络编辑器,选择VMnet8,去掉使用本地DHCP服务将ip地址分配给虚拟机(D). 3. 点击NAT设置(S)查 ...

  5. ORM常用字段及方式

    创建小型数据库 模型层 ORM常用字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. Integer ...

  6. CF1326C Permutation Partitions 题解,

    原题链接 简要题意: 给定一个 \(1\) ~ \(n\) 的置换,将数组分为 \(k\) 个区间,使得每个区间的最大值之和最大.求这个值,和分区的方案数. 关键在于 \(1\) ~ \(n\) 的置 ...

  7. 命令行中运行Java字节码文件提示找不到或无法加载主类的问题

    测试类在命令行操作,编译通过,运行时,提示 错误: 找不到或无法加载主类 java类 package com.company.schoolExercise; public class test7_3_ ...

  8. Samba centos7文件共享服务器搭建教程,可以更改任意需求操作配置详解。

    先安装软件   yum -y install samba-client 请看如下配置文件说明 [gongxiang]       comment = This is my shared folder  ...

  9. 《自拍教程52》Python_adb运行Shell脚本

    Android作为一款Linux终端,肯定是支持.sh后缀的Shell脚本的运行的, 有时候测试环境准备或者长时间截取复杂的日志等,开发会给到一些Shell脚本. Shell脚本的执行的优势: 快捷高 ...

  10. 【原创】linux spinlock/rwlock/seqlock原理剖析(基于ARM64)

    背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...