gpt4 book ai didi

elasticsearch - ElasticSearch 中字符串数组与串联字符串的内部结构

转载 作者:行者123 更新时间:2023-12-04 08:25:46 29 4
gpt4 key购买 nike

我试图更好地理解 ElasticSearch 的内部结构,所以我想知道 ElasticSearch 在内部计算以下两种情况的术语统计信息的方式是否存在任何差异。

第一种情况是当我有这样的文件时:

{
"foo": [
{
"bar": "long string"
},
{
"bar": "another long string"
}
]
}

或者像这样的文档:

{
"foobar": "long string another long string"
}

我的理解是第一个文档被扁平化为:

{
"foo.bar": ["long string", "another long string"]
}

所以看起来问题真的是,第二个和第三个文档索引相同吗?术语统计计算是否相同?

最佳答案

有趣的问题!如果您索引第一个和第二个文档,然后查看 term vectors对于 foo.bar 字段,您会注意到频率和偏移量完全相同,但是位置不同。

term vector differences

原因与 position_increment_gap 有关。设置,其默认值为 100。引入此假间隙的原因是为了防止短语查询跨值匹配。

所以在第一个文档中,foo.bar 字段有多个值,正如您正确注意到的那样,这就是为什么术语位置与只有一个字符串的第二个文档不同的原因。

["long string", "another long string"]

这意味着如果您尝试使用 match_phrase 查询来匹配 string another,那么它不会匹配第一个文档,只会匹配第二个文档。

您仍然可以决定在第一个文档的映射中更改 position_increment_gap 的值并将其设置为 0,在这种情况下,两个文档的索引方式将完全相同。

关于elasticsearch - ElasticSearch 中字符串数组与串联字符串的内部结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65271653/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com