我试图更好地理解elasticsearch的内部结构,所以我想知道elasticsearch内部计算以下两种情况的术语统计数据的方式是否有任何不同。
第一种情况是我有如下文件:
{
"foo": [
{
"bar": "long string"
},
{
"bar": "another long string"
}
]
}
或者像这样的文件:
{
"foobar": "long string another long string"
}
我的理解是,第一个文档将变为:
{
"foo.bar": ["long string", "another long string"]
}
所以问题是,第二个和第三个文档的索引是否相同?术语统计的计算方法相同吗?
1条答案
按热度按时间vohkndzv1#
有趣的问题!如果索引第一个和第二个文档,然后查看
foo.bar
字段中,您会注意到频率和偏移量完全相同,但是位置不同。原因与
position_increment_gap
设置,其默认值为100。引入这个假间隙的原因是为了防止短语查询跨值匹配。所以在第一份文件中
foo.bar
字段有多个值,正如您正确地注意到的,这就是为什么术语位置与第二个文档(其中只有一个字符串)不同的原因。也就是说如果你想用
match_phrase
匹配查询string another
,则它将不匹配第一个文档,而只匹配第二个文档。您仍然可以决定更改
position_increment_gap
并将其设置为0,在这种情况下,两个文档的索引方式完全相同。