Elasticsearch 中实际存储的规范是什么

5 elasticsearch

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

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

以下是上述链接的片段:

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

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

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

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

Pie*_*let 6

这是我的回答尝试:)

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

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

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

标准的默认值?

标准在文本字段上激活,在其他字段上禁用。

我可以使用一些 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": []
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

fieldLengthavgFieldLength根据norms数据计算出来的

这个答案主要基于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