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

irlmq6kh  于 2021-06-13  发布在  ElasticSearch
关注(0)|答案(1)|浏览(411)

我试图更好地理解elasticsearch的内部结构,所以我想知道elasticsearch内部计算以下两种情况的术语统计数据的方式是否有任何不同。
第一种情况是我有如下文件:

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

或者像这样的文件:

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

我的理解是,第一个文档将变为:

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

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

vohkndzv

vohkndzv1#

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

原因与 position_increment_gap 设置,其默认值为100。引入这个假间隙的原因是为了防止短语查询跨值匹配。
所以在第一份文件中 foo.bar 字段有多个值,正如您正确地注意到的,这就是为什么术语位置与第二个文档(其中只有一个字符串)不同的原因。

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

也就是说如果你想用 match_phrase 匹配查询 string another ,则它将不匹配第一个文档,而只匹配第二个文档。
您仍然可以决定更改 position_increment_gap 并将其设置为0,在这种情况下,两个文档的索引方式完全相同。

相关问题