学习总结录 学习总结录
首页
归档
分类
标签
  • Java基础
  • Java集合
  • MySQL
  • Redis
  • JVM
  • 多线程
  • 计算机网络
  • 操作系统
  • Spring
  • Kafka
  • Elasticsearch
  • Python
  • 面试专题
  • 案例实践
  • 工具使用
  • 项目搭建
  • 服务治理
  • ORM框架
  • 分布式组件
  • MiniSpring
  • 设计模式
  • 算法思想
  • 编码规范
友链
关于
GitHub (opens new window)
首页
归档
分类
标签
  • Java基础
  • Java集合
  • MySQL
  • Redis
  • JVM
  • 多线程
  • 计算机网络
  • 操作系统
  • Spring
  • Kafka
  • Elasticsearch
  • Python
  • 面试专题
  • 案例实践
  • 工具使用
  • 项目搭建
  • 服务治理
  • ORM框架
  • 分布式组件
  • MiniSpring
  • 设计模式
  • 算法思想
  • 编码规范
友链
关于
GitHub (opens new window)
  • Java基础

  • Java集合

  • MySQL

  • Redis

  • JVM

  • 多线程

  • 计算机网络

  • Spring

  • Kafka

  • Elasticsearch

    • ElasticSearch基本概念
    • 文档基本操作
    • 倒排索引
    • 分词器
    • Mapping和常见字段类型
    • Index Template&Dynamic Template
    • Elasticsearch聚合分析简介
    • 基于词项和基于全文的搜索
    • 结构化搜索
    • 搜索的相关性算分
      • 一、相关性
      • 二、词频TF
      • 三、IDF逆文档频率
      • 四、案例实践
      • 参考
    • 单字符串多字段查询
    • SearchTemplate 和 Index Alias 查询
    • Function Score Query 优化算分
    • Term&Phrase Suggester
    • 自动补全于基于上下文的提示
  • Python

  • 面试专题

  • 知识库
  • Elasticsearch
旭日
2023-05-29
目录

搜索的相关性算分

# 一、相关性

  • 搜索的相关性算分,描述了一个文档和查询语句匹配的程度。ES会对每个匹配查询条件的结果进行算分_score。
  • 打分的本质是排序,需要把最符合用户需求的文档排在前面。ES 5之前,默认相关性算分是用的TF-IDF,现在采用BM 25.

# 二、词频TF

Term Frequency:检索词在一篇文章中出现的频率,相当于是检索词出现的次数处于文档的总数。

而计算一条查询和结果文档相关的简单方法:就是把一句话的每个分词的TF相加,例如:TF(我)+ TF(爱)+ TF(你)。

但是这个存在一个问题,比如“的”这个词在文档出现了很多次,但是对于算分基本上没有什么意义,就不应该考虑他们的存在。

# 三、IDF逆文档频率

  • DF:检索词在所有文档中出现的频率。
  • IDF:log(全部文档数/检索词出现过的文档总数)。
  • TF-IDF本质上就是将TF求和变成了加权求和
    • TF(我 ) * IDF(我)+ TF(爱) * IDF(爱)+ TF(你)* IDF(你)

# 四、案例实践

数据准备

PUT testscore/_bulk
{ "index": { "_id": 1 }}
{ "content":"we use Elasticsearch to power the search" }
{ "index": { "_id": 2 }}
{ "content":"we like elasticsearch" }
{ "index": { "_id": 3 }}
{ "content":"The scoring of documents is caculated by the scoring formula" }
{ "index": { "_id": 4 }}
{ "content":"you know, for search" }

相关性查询

POST /testscore/_search
{
  // 打开算分分析
  //"explain": true,
  "query": {
    "match": {
      //"content":"you"
      "content": "elasticsearch"
      //"content":"the"
      //"content": "the elasticsearch"
    }
  }
}
{
  "took" : 4,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 0.8713851,
    "hits" : [
      {
        "_index" : "testscore",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 0.8713851,
        "_source" : {
          "content" : "we like elasticsearch"
        }
      },
      {
        "_index" : "testscore",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 0.6489038,
        "_source" : {
          "content" : "we use Elasticsearch to power the search"
        }
      }
    ]
  }
}

we use Elasticsearch to power the search和we like elasticsearch都包含了elasticsearch这个关键词,但是后者整个语句更短,因此elasticsearch的权重更多。

Boosting控制

  • 当boost > 1时,打分的相关度相对性提高。
  • 当0 < boost < 1时,打分的权重相对性降低。
  • 当boost < 0时,贡献负分。
POST testscore/_search
{
    "query": {
        "boosting" : {
            "positive" : {
                "term" : {
                    "content" : "elasticsearch"
                }
            },
            "negative" : {
                 "term" : {
                     "content" : "like"
                }
            },
            "negative_boost" : 0.2
        }
    }
}

# 参考

Elasticsearch 核心技术与实战 (opens new window)

#Elasticsearch
上次更新: 2024/06/29, 15:13:44
结构化搜索
单字符串多字段查询

← 结构化搜索 单字符串多字段查询→

最近更新
01
基础概念
10-31
02
Pytorch
10-30
03
Numpy
10-30
更多文章>
Theme by Vdoing | Copyright © 2021-2024 旭日 | 蜀ICP备2021000788号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式