ES相关度评分

2024-06-04 03:38
文章标签 es 评分 相关度

本文主要是介绍ES相关度评分,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

算法介绍

relevance score(相关度得分)算法:简单来说,就是计算出,一个索引中的文本,与搜索文本,他们之间的关联匹配程度

Elasticsearch 使用的是 term frequency/inverse document frequency 算法,简称为 TF/IDF 算法

TF/IDF 有以下三个组成

  • Term frequency(词的频率)

搜索文本中的各个词条在 field 文本中出现了多少次,出现次数越多,就越相关

比如:搜索请求:hello world,肯定是 doc1 中得分高

doc1:hello you, and world is very good doc2:hello, how are you

  • Inverse document frequency

搜索文本中的各个词条在整个索引的所有文档中出现了多少次,出现的次数越多,就越不相关

比如:搜索请求:hello world ,hello 在 doc 2 中出现了两次,得分就会低

doc1:hello world today is very good doc2:hello hello world is very good

  • Field-length norm:

field 长度,field 越长,相关度越弱

比如:搜索请求:hello world

doc1:{ “title”: “hello article”, “content”: “babaaba 1万个单词” } doc2:{ “title”: “my article hi world”, “content”: “blablabala 1万个单词” }

hello world 在整个 index 中出现的次数是一样多的

doc1更相关,title field更短

案例

GET /article/_search
{"query": {"multi_match": {"query": " red dog","fields": ["title","content"],"tie_breaker": 0.3}}
}

结果

  "hits" : [{"_index" : "article","_type" : "_doc","_id" : "5","_score" : 1.5956411,"_source" : {"title" : "red dog","content" : "I don't like red dog, bug my gridfrind like it"}},{"_index" : "article","_type" : "_doc","_id" : "3","_score" : 1.0691401,"_source" : {"title" : "a dog","content" : "this is a red dog"}},{"_index" : "article","_type" : "_doc","_id" : "2","_score" : 0.9317024,"_source" : {"title" : "a dog","content" : "a red dog and a blue dog is running"}},{"_index" : "article","_type" : "_doc","_id" : "4","_score" : 0.33297,"_source" : {"title" : "a dog","content" : "this is a stupid dog"}}]

可以看到 title 等于red dog 的这个评分最高,因为title符合tf的规律,red 和dog这两个词都出现了。 也符合idf 两个词都仅仅出现一次,也符合tfnorm, title的内容也非常短。因此排名最高。

后面的就可以按照哪一条内容更符合这三条规则来排序的。

tie_break: 默认在多字段查询的时候,es会选择一个得分最高的字段最为这个记录的得分。 加上这个tie_break之后就会做一个综合计算。
可以看看下面的这个文章。tie_break作用

bool 下得分情况

GET /article/_search
{"query": {"bool": {"should": [{"match": {"title": "dog"}},{"match": {"title": "bird"}}]}}
}

结果

 "hits" : {"total" : {"value" : 5,"relation" : "eq"},"max_score" : 1.6360589,"hits" : [{"_index" : "article","_type" : "_doc","_id" : "1","_score" : 1.6360589,"_source" : {"title" : " a bird ","content" : " bird can fly "}},{"_index" : "article","_type" : "_doc","_id" : "3","_score" : 0.25613075,"_source" : {"title" : "a dog","content" : "this is a red dog"}},{"_index" : "article","_type" : "_doc","_id" : "4","_score" : 0.25613075,"_source" : {"title" : "a dog","content" : "this is a stupid dog"}},{"_index" : "article","_type" : "_doc","_id" : "2","_score" : 0.25613075,"_source" : {"title" : "a dog","content" : "a red dog and a blue dog is running"}},{"_index" : "article","_type" : "_doc","_id" : "5","_score" : 0.18662795,"_source" : {"title" : "red dog","content" : "I don't like red dog, bug my gridfrind like it"}}]}

可以看到 bird的得分最高, 根据 idf的算法,一个单出现的频繁越高,他的得分越得, Bird 这个词需要的频繁很低,而dog这个词出现的频繁很高, 所以就默认bird 这个词就更重要一些。

交个朋友吧

在这里插入图片描述

这篇关于ES相关度评分的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1028963

相关文章

ElasticSearch的DSL查询⑤(ES数据聚合、DSL语法数据聚合、RestClient数据聚合)

目录 一、数据聚合 1.1 DSL实现聚合 1.1.1 Bucket聚合  1.1.2 带条件聚合 1.1.3 Metric聚合 1.1.4 总结 2.1 RestClient实现聚合 2.1.1 Bucket聚合 2.1.2 带条件聚合 2.2.3 Metric聚合 一、数据聚合 聚合(aggregations)可以让我们极其方便的实现对数据的统计、分析、运算。例如:

OpenGL ES学习总结:基础知识简介

什么是OpenGL ES? OpenGL ES (为OpenGL for Embedded System的缩写) 为适用于嵌入式系统的一个免费二维和三维图形库。 为桌面版本OpenGL 的一个子集。 OpenGL ES管道(Pipeline) OpenGL ES 1.x 的工序是固定的,称为Fix-Function Pipeline,可以想象一个带有很多控制开关的机器,尽管加工

OpenGL ES 2.0渲染管线

http://codingnow.cn/opengles/1504.html Opengl es 2.0实现了可编程的图形管线,比起1.x的固定管线要复杂和灵活很多,由两部分规范组成:Opengl es 2.0 API规范和Opengl es着色语言规范。下图是Opengl es 2.0渲染管线,阴影部分是opengl es 2.0的可编程阶段。   1. 顶点着色器(Vert

使用Python实现智能信用评分系统

1. 项目简介 本教程将带你一步步实现一个智能信用评分系统。我们将使用Python和一些常用的深度学习库,如TensorFlow和Keras。最终,我们将实现一个可以预测信用评分的模型。 2. 环境准备 首先,你需要安装以下库: TensorFlowKeraspandasnumpyscikit-learn 你可以使用以下命令安装这些库: pip install tensorflow

Elastic Stack--ES集群加密及Kibana的RBAC实战

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 学习B站博主教程笔记:  最新版适合自学的ElasticStack全套视频(Elk零基础入门到精通教程)Linux运维必备—ElasticSearch+Logstash+Kibana精讲_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1VMW3e6Ezk/?sp

期货赫兹量化-种群优化算法:进化策略,(μ,λ)-ES 和 (μ+λ)-ES

进化策略(Evolution Strategies, ES)是一种启发式算法,旨在模仿自然选择的过程来解决复杂的优化问题,尤其在没有显式解、或搜索空间巨大的情况下表现良好。基于自然界的进化原理,进化策略通过突变、选择等遗传算子迭代生成解,并最终寻求全局最优解。 进化策略通常基于两个核心机制:突变和选择。突变是对当前解进行随机扰动,而选择则用于保留适应度更高的个体。本文详细介绍了 (μ,λ)-ES

鸿蒙(API 12 Beta6版)图形加速【OpenGL ES平台内插模式】超帧功能开发

超帧内插模式是利用相邻两个真实渲染帧进行超帧计算生成中间的预测帧,即利用第N-1帧和第N帧真实渲染帧预测第N-0.5帧预测帧,如下图所示。由于中间预测帧的像素点通常能在前后两帧中找到对应位置,因此内插模式的预测帧效果较外插模式更优。由于第N帧真实渲染帧需要等待第N-0.5帧预测帧生成并送显后才能最终送显,因此会新增1~2帧的响应时延。 OpenGL ES平台 业务流程 基于OpenGL

ES实现百亿级数据实时分析实战案例

点击上方蓝色字体,选择“设为星标” 回复”资源“获取更多资源 背景 我们小组前段时间接到一个需求,希望能够按照小时为单位,看到每个实验中各种特征(单个或组合)的覆盖率、正样本占比、负样本占比。我简单解释一下这三种指标的定义: 覆盖率:所有样本中出现某一特征的样本的比例正样本占比:所有出现该特征的样本中,正样本的比例负样本占比:所有出现该特征的样本中,负样本的比例 光看这三个指标,大家可能会觉得

【硬刚ES】ES基础(二十一) 单字符串多字段查询:Multi Match

本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的ES部分补充。

【硬刚ES】ES基础(二十) 单字符串多字段查询:Dis Max Query

本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的ES部分补充。