首页 > 解决方案 > Elasticsearch 中实际存储的规范

问题描述

我遇到了一个映射,其中在某些使用 的字段custom analyzer上禁用了规范。

然后我阅读了有关规范和https://www.elastic.co/guide/en/elasticsearch/reference/current/norms.html找到了这个官方文档,但它并没有清楚地解释它到底存储了什么以及它实际上是如何有用的在得分

以下是上述链接的片段:

规范存储稍后在查询时使用的各种归一化因子,以便计算文档相对于查询的分数。

我发现了一些其他文档,它们提供了更多信息,并建议禁用已分析字段的规范,例如表示相对字段长度和索引时间提升设置的数字。但我仍然无法完全理解它。

所以,简而言之,我有以下疑问:

  1. 规范存储的究竟是什么?
  2. 究竟什么是相对字段长度以及它对评分有何用处?
  3. 规范的默认值?
  4. 我可以使用一些 ES 查询来查看规范的内容吗?

标签: elasticsearch

解决方案


这是我的回答尝试:)

规范存储的到底是什么,相对字段长度到底是什么以及它对评分有何用处?

它存储允许弹性知道相对字段长度的信息。为什么 ?

场地有多长?字段越短,权重越高。如果一个术语出现在一个较短的字段中,例如标题字段,则该字段的内容更有可能与该术语有关,而不是相同的术语出现在一个更大的正文字段中

规范的默认值?

规范在文本字段上激活,在其他字段上禁用。

我可以使用一些 ES 查询来查看规范的内容吗?

不,规范存储在细分的数据中。但是,如果您在请求中使用说明标志,您可以看到规范的影响。在分数解释混乱的某个地方,你会看到类似的东西:

{
    "value": 1.4506965,
    "description": "tfNorm, computed as (freq * (k1 + 1)) / (freq + k1 * (1 - b + b * fieldLength / avgFieldLength)) from:",
    "details": [
        {
            "value": 3,
            "description": "termFreq=3.0",
            "details": []
        },
        {
            "value": 1.2,
            "description": "parameter k1",
            "details": []
        },
        {
            "value": 0.75,
            "description": "parameter b",
            "details": []
        },
        {
            "value": 34.572754,
            "description": "avgFieldLength",
            "details": []
        },
        {
            "value": 48,
            "description": "fieldLength",
            "details": []
        }
    ]
}

由于数据,在哪里计算fieldLengthavgFieldLengthnorms

这个答案主要基于https://www.elastic.co/fr/blog/practical-bm25-part-2-the-bm25-algorithm-and-its-variableshttps://www.elastic.co/指南/en/elasticsearch/guide/current/scoring-theory.html#field-norm


推荐阅读