elasticsearch - Elasticsearch 中实际存储的规范
问题描述
我遇到了一个映射,其中在某些使用 的字段custom analyzer
上禁用了规范。
然后我阅读了有关规范和https://www.elastic.co/guide/en/elasticsearch/reference/current/norms.html找到了这个官方文档,但它并没有清楚地解释它到底存储了什么以及它实际上是如何有用的在得分。
以下是上述链接的片段:
规范存储稍后在查询时使用的各种归一化因子,以便计算文档相对于查询的分数。
我发现了一些其他文档,它们提供了更多信息,并建议禁用已分析字段的规范,例如表示相对字段长度和索引时间提升设置的数字。但我仍然无法完全理解它。
所以,简而言之,我有以下疑问:
- 规范存储的究竟是什么?
- 究竟什么是相对字段长度以及它对评分有何用处?
- 规范的默认值?
- 我可以使用一些 ES 查询来查看规范的内容吗?
解决方案
这是我的回答尝试:)
规范存储的到底是什么,相对字段长度到底是什么以及它对评分有何用处?
它存储允许弹性知道相对字段长度的信息。为什么 ?
场地有多长?字段越短,权重越高。如果一个术语出现在一个较短的字段中,例如标题字段,则该字段的内容更有可能与该术语有关,而不是相同的术语出现在一个更大的正文字段中
规范的默认值?
规范在文本字段上激活,在其他字段上禁用。
我可以使用一些 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": []
}
]
}
由于数据,在哪里计算fieldLength
和avgFieldLength
norms
这个答案主要基于https://www.elastic.co/fr/blog/practical-bm25-part-2-the-bm25-algorithm-and-its-variables和https://www.elastic.co/指南/en/elasticsearch/guide/current/scoring-theory.html#field-norm
推荐阅读
- cmake - 使用 CMake 传递 LLVM 的编译器选项依赖项
- ios - 使用 SwiftUI 在 CoreData 中处理 Header / Detail 视图的正确方法
- html - 如何使包含跨度和不间断空格的标题包裹整个单词
- excel - excel VBA 代码中的自动化错误或错误 462
- typescript - Airtable Typescript - 从DefinitelyTyped 库中导入类型
- java - Thymeleaf 从请求或会话中获取当前语言环境
- python - 枕头,文本居中不起作用,这是如何完成的?
- go - 使用阅读器从 []byte 读取结构时出错
- django - BootstrapError:参数“form”应包含有效的 Django 表单
- c - Mac OS Catalina sbrk 已弃用