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

相关文章

es安装教程

环境介绍# 软件版本:ElasticSearch7.0.0 Kibana7.0.0 系统环境:mac 环境 安装过程# 官网下载 ElasticSearch7.0.0 版本,下载后解压即可 进入es安装目录 cd elasticsearch-7.0.0bin/elasticsearch 如果报错的话直接给整个目录增加读写权限 在页面中访问 http://localhost:920

OpenGL-ES 学习(6)---- 立方体绘制

目录 立方体绘制基本原理立方体的顶点坐标和绘制顺序立方体颜色和着色器实现效果和参考代码 立方体绘制基本原理 一个立方体是由8个顶点组成,共6个面,所以绘制立方体本质上就是绘制这6个面共12个三角形 顶点的坐标体系如下图所示,三维坐标的中心原点位于立方体的中心,但是要特别注意的是,前后方向表示的是Z轴,上下方向表示的是Y轴 立方体的顶点坐标和绘制顺序 立方体坐标定义

39 - 电影评分(高频 SQL 50 题基础版)

39 - 电影评分 (selectu.name as resultsfromMovieRating m left join Users u on m.user_id=u.user_id GROUP BYm.user_idorder by count(*) desc,u.name asc limit 1)union all(selectm1.title as results

ES单条数据录入操作

录入数据时先在库里进行查询,如果数据存在的话,进行更新数据;如果库里面此条数据不存在的话,进行插入数据以下是封装的完整代码可以参考 from elasticsearch import Elasticsearchurl = 'http://%s:%s/' % ('ip', 'port')ES = Elasticsearch(url)query = {"query": {"bool": {"mus

Es项目关于数据库和es数据同步问题解决

Es项目关于数据库和es数据同步问题解决 方法 项目拆分成两个模块,(一个模块用作数据修改和写入数据库,另一个模块只用于数据读取和同步,读取和同步模块使用只调用和同步es)用户新增修改数据库成功后调用es同步微服务模块,es同步成功后再返回给用户处理结果。 方法优点 : 实现简单 方法缺点 :项目耦合度高,耗费时间长 两个模块之间添加一个mq中间件,用户修改或者新增数据到数据库的时候,直接

【机器学习】在【R语言】中的应用:结合【PostgreSQL数据库】的【金融行业信用评分模型】构建

目录 1.数据库和数据集的选择 1.准备工作 2.PostgreSQL安装与配置 3.R和RStudio安装与配置 2.数据导入和预处理 1.连接数据库并导入数据 1.连接数据库 2.数据检查和清洗 1.数据标准化 2.拆分训练集和测试集 3.特征工程 1.生成新特征 2.特征选择 4.模型训练和评估 1.逻辑回归 2.随机森林 3.XGBoost 4.模型比较

Google评分卡

Google评分卡可以分为四档:0~2是一档;3~5是二挡;6~8是三档;9~10是四挡。 0——对于相关的技术领域还不熟悉; 1——可以读懂这个领域的基础知识; 2——可以实现一些小的改动,清楚基本的原理,并能够在简单的指导下自己找到更多的细节。 3——基本精通这个技术领域,完全不需要别人的帮助 4——对这个技术领域非常的熟悉和舒适,可以应对和完成所有的日常工作 对于软件领域—有

Vite和Vue3:Vite是一种新的开发服务器和构建工具,它利用了现代浏览器支持的原生ES模块导入,为开发者提供了极速的冷启动和即时热更新

I. Vite 的概述 Vite的定义和功能   Vite 是一个由 Vue.js 的作者开发的现代前端构建工具,目标是提供一种尽可能快的现代开发体验。"Vite" 在法语中意思是 "快",这也正是其设计的目标之一。   Vite 的功能主要包括:   开发服务器:使用原生的 ES modules 搭建了一个开发服务器,使得开发环境中依赖包的导入变得更加轻巧快速。 构建:Vite 利用 R

AUCell和AddModuleScore函数进行基因集评分

AUCell 和AddModuleScore 分析是两种主流的用于单细胞RNA测序数据的基因集活性分析的方法。这些基因集可以来自文献、数据库或者根据具体研究问题进行自行定义。 AUCell分析原理: 1、AUCell分析可以将细胞中的所有基因按表达量进行排序,生成一个基因排名列表,表达量越高的基因排名越靠前。 2、接下来对每个基因集中的基因找到它们在每个细胞的基因排名列表中的位置,这些位置则

ES数值类型慢查询优化

现象 某个查询ES接口慢调用告警,如图,接口P999的耗时都在2500ms: 基本耗时都在查询ES阶段: 场景与ES设定 慢调用接口为输入多个条件分页查询,慢调用接口调用的ES索引为 express_order_info,该索引通过DTS(数据同步服务)聚合了 订单服务的一张MySQL表 和 分班服务的一张MySQL表 的相关数据: 一个subClazzNumber (用户查询必填