ES搜索排序、相关性、评分机制

默认情况下,ES的搜索结果是排序的,是按 相关性 倒序排列的------相关性最高的排在最前面。

那么什么是相关性,相关性如何计算?

每个文档都有相关性评分,用一个正浮点数字段 _score 来表示 。 _score 的评分越高,相关性越高。

查询语句会为每个文档生成一个 _score 字段。(评分的计算方式取决于查询类型 不同的查询语句用于不同的目的,这里不详细介绍。)

Elasticsearch 的相似度算法被定义为检索词频率/反向文档频率, TF/IDF ,包括以下内容:

检索词频率

检索词在该字段出现的频率?出现频率越高,相关性也越高。 字段中出现过 5 次要比只出现过 1 次的相关性高。

反向文档频率

每个检索词在索引中出现的频率?频率越高,相关性越低。检索词出现在多数文档中会比出现在少数文档中的权重更低。常用词如 and 或 the 对相关度贡献很少,因为它们在多数文档中都会出现。

字段长度准则

字段的长度是多少?长度越长,相关性越低。 检索词出现在一个短的 title 要比同样的词出现在一个长的 content 字段权重更大。

 下面举例说明,理解评分标准

假设,检索关键词 `honeymoon`,在索引上所有文档中的`tweet`字段中检索。

检索词频率:

检索词 `honeymoon` 在这个文档的 `tweet` 字段中的出现次数。出现次数越多,评分越高。

反向文档频率:

检索词 `honeymoon` 在索引上所有文档的 `tweet` 字段中出现的次数。出现次数越多,评分越低。

字段长度准则:

在这个文档中, `tweet` 字段内容的长度 -- 内容越长,评分越低。

以上内容,根据ES官网内容学习整理。https://www.elastic.co/

 

<think>好的,我现在需要详细解释ElasticsearchES)中的相关性评分。首先,用户可能想知道相关性评分的基本概念,所以我要从什么是相关性评分开始。然后,得介绍ES使用的具体算法,应该是TF-IDF和BM25这些,得确认一下不同版本ES的变化,比如BM25是从哪个版本开始成为默认的。接下来,可能需要分步骤说明评分机制,比如词频、逆文档频率、字段长度归一化这些因素。还要提到可用的调节参数,比如boost,以及如何通过自定义查询来调整评分。另外,用户可能想知道如何验证和调试评分,比如使用explain API。最后,可能需要举一些实际的例子来说明不同情况下的评分变化。要确保结构清晰,用中文,注意数学公式的正确格式,行内公式用$...$,独立公式用$$...$$。检查是否有错误,比如TF-IDF和BM25的区别,以及ES版本的信息是否正确。可能需要查阅ES官方文档确认细节,比如BM25是否在5.0之后成为默认,以及相关参数的具体作用。确保回答真实可靠,避免技术错误。</think>ElasticsearchES)中的相关性评分(Relevance Scoring)用于衡量文档与搜索查询的匹配程度。其核心算法经历了从**TF-IDF**到**BM25**的演变(ES 5.0+默认使用BM25)。以下是详细解析: --- ### 一、相关性评分核心原理 #### 1. **TF-IDF(早期ES版本)** - **词频(Term Frequency, TF)** 公式:$TF(t,d) = \sqrt{\text{词}t在文档d中出现的次数}$ 词频越高,文档与查询的相关性越高。 - **逆文档频率(Inverse Document Frequency, IDF)** 公式:$IDF(t) = \log \left(1 + \frac{\text{总文档数}}{\text{包含词}t的文档数 + 1}\right)$ 常见词的IDF较低(如“的”),罕见词的IDF较高。 - **字段长度归一化(Field-length Norm)** 公式:$norm(d) = \frac{1}{\sqrt{\text{文档d中字段的token数}}}$ 短字段(如标题)匹配的权重高于长字段(如正文)。 **综合公式**: $$score_{TF-IDF} = \sum \left[ TF(t,d) \cdot IDF(t)^2 \cdot norm(d) \right]$$ #### 2. **BM25(ES 5.0+默认算法)** BM25改进了TF-IDF,对长文档和词频饱和问题处理更优: - **词频饱和度控制**:避免高频词过度影响得分。 - **字段长度调节**:通过参数$b$控制字段长度归一化强度。 **公式**: $$score_{BM25} = \sum \left[ IDF(t) \cdot \frac{TF(t,d) \cdot (k_1 + 1)}{TF(t,d) + k_1 \cdot (1 - b + b \cdot \frac{|d|}{avg\_dl})} \right]$$ 其中: - $k_1$:控制词频饱和度(默认1.2) - $b$:控制字段长度影响(默认0.75) - $|d|$:文档长度,$avg\_dl$:平均文档长度 --- ### 二、相关性调节方法 #### 1. **查询参数调节** - **Boost参数**:提升特定字段或词的权重。 示例:`"title^3"`表示标题字段权重是默认的3倍。 - **自定义评分查询**:使用`function_score`叠加自定义逻辑(如热度、时间衰减)。 #### 2. **BM25参数调优** ```json PUT /my_index { "settings": { "similarity": { "custom_bm25": { "type": "BM25", "k1": 1.5, "b": 0.6 } } } } ``` --- ### 三、调试与验证 #### 1. **Explain API** 使用`explain: true`查看评分细节: ```json GET /my_index/_search { "explain": true, "query": { "match": { "title": "elasticsearch" } } } ``` #### 2. **典型场景分析** - **短字段匹配**:标题匹配得分高于正文。 - **罕见词匹配**:IDF值高,显著提升得分。 - **长文档惩罚**:BM25自动降低长文档中高频词的贡献。 --- ### 四、对比总结 | 特性 | TF-IDF | BM25 | |--------------|----------------------|----------------------| | 词频饱和度 | 线性增长 | 非线性饱和 | | 长文档处理 | 归一化效果较弱 | 通过参数$b$灵活控制 | | 默认版本 | ES 5.0之前 | ES 5.0+ | --- 通过理解评分机制和调节工具,可优化搜索排序效果,例如提升时效性内容或精准匹配字段的权重。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值