IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> Es 查询结果_score调整 -> 正文阅读

[C++知识库]Es 查询结果_score调整

一、问题背景:

背景:语文老师反馈试题查询的结果不理想。
原因:正常应该靠前的题目,搜索得分比较靠后,没有在前几页显示出来。

一、Es默认的记分方式

使用Es时,查询出来的文档排序依据是_score,这个_score是如何计算的可以通过添加 “explain”: true 条件来查看。
它的计算原理是基于词频/逆向文档频率(TF/IDF),详情参考官方文档:相关度评分背后的理论

二、此种方式的弊端

Es默认的词频/逆向文档频率(TF/IDF)评分方式,对于出现次数较少的重要关键字提取效果不佳,可能会导致一些本想搜索出来的结果排在后面。
在这里插入图片描述

三、改进方式

1、使用邻近度来提高相关度

以should子句的形式添加更多特定查询。每个匹配了should子句的文档都会增加其相关度。另外,增大boost可以增大权重。

GET /_search
{
  "from": 0,
  "size": 10,
  "timeout": "20s",
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "body": {
              "query": "彩色的荒漠",
              "operator": "OR",
              "analyzer": "ik_max_word",
              "prefix_length": 0,
              "max_expansions": 50,
              "minimum_should_match": "1",
              "fuzzy_transpositions": true,
              "lenient": false,
              "zero_terms_query": "NONE",
              "auto_generate_synonyms_phrase_query": true,
              "boost": 1
            }
          }
        }
      ],
      "should": [
        {
          "match_phrase": {
            "body": {
              "query": "彩色的荒漠",
              "slop": 3,
              "boost": 2
            }
          }
        }
      ],
      "adjust_pure_negative": true,
      "boost": 1
    }
  },
  "sort": [
    {
      "_score": {
        "order": "desc"
      }
    },
    {
      "questionId": {
        "order": "desc"
      }
    }
  ],
  "track_total_hits": 2147483647
}

2、关键字functions和weight滤集提升权重分

可以为列表里的每个加强函数都指定一个filter,这样做的话,只有在文档满足此filter的要求,此filter的加强函数才会应用到文档上,也可以不指定filter,这样的话此加强函数就会应用到全部的文档上。一个文档可以一次满足多条加强函数和多个filter,如果一次满足多个,那么就会产生多个加强score。因此Es会先使用score_mode定义的方式来合并这些加强score们,得到一个总加强score,得到总加强score之后,才会再使用boost_mode定义的方式去和old_score做合并。

GET _search
{
  "from": 0,
  "size": 10,
  "timeout": "20s",
  "query": {
    "function_score": {
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "body": {
                  "query": "彩色的荒漠",
                  "operator": "OR",
                  "analyzer": "ik_smart",
                  "prefix_length": 0,
                  "max_expansions": 50,
                  "minimum_should_match": 1,
                  "fuzzy_transpositions": true,
                  "lenient": false,
                  "zero_terms_query": "NONE",
                  "auto_generate_synonyms_phrase_query": true,
                  "boost": 1
                }
              }
            }
          ],
          "adjust_pure_negative": true,
          "boost": 1
        }
      },
      "functions": [
        {
          "filter": {
            "term": {
              "body": "彩色"
            }
          },
          "weight": 2
        },
        {
          "filter": {
            "term": {
              "body": "的"
            }
          },
          "weight": 2
        },
        {
          "filter": {
            "term": {
              "body": "荒漠"
            }
          },
          "weight": 2
        }
      ],
      "score_mode": "multiply",
      "boost_mode": "multiply"
    }
  },
  "sort": [
    {
      "_score": {
        "order": "desc"
      }
    },
    {
      "questionId": {
        "order": "desc"
      }
    }
  ],
  "track_total_hits": 2147483647
}

四、Java代码

创建MatchPhraseQueryBuilder,具体参考:Java Elasticsearch Match Phrase 短语查询

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-27 11:41:17  更:2021-08-27 11:43:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:27:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码