带有doc_values的not_analyzed字段仍在fielddata缓存中

时间:2015-07-25 06:21:46

标签: mapping elasticsearch

fielddata vs doc_values的一些实验中,我遇到了一个奇怪的案例。在我之前的映射中,我根本没有使用doc值。在我的新映射中,我已将doc_values: true添加到我的映射中的所有字段,但已分析的字符串字段和布尔值(not supported until 2.0)除外。

详细说明,以下是我的进展方式:

在重新索引我的所有数据之前,我重新启动了我的ES 1.7群集,并运行了一个带有排序,聚合和脚本字段的查询来预热"热身" fielddata缓存。然后我查询/fielddata端点以了解fielddata缓存的使用情况。它看起来像这样:

curl -XGET 'localhost:9200/_cat/fielddata?v&fields=*'

id      host   ip            node  total  items.desc.raw more_fields...
rKX7... myhost 192.168.1.100 Doom  32.9mb 2.3mb          ...

如您所见,字段items.desc.raw使用了2.3mb的堆空间。 items属于nested类型,其中包含一个字符串多字段,其中not_analyzed子字段名为raw。简而言之,该嵌套字段的映射如下所示:

    "items": {
      "type": "nested",
      "properties": {
        "desc": {
          "type": "string",
          "fields": {
            "raw": {
              "type": "string",
              "index": "not_analyzed"
            }
          }
        }
      }
    }

doc_values: true添加到items.desc.raw后,重新索引整个索引并运行一些聚合,再次排序和编写脚本来预热fielddata缓存,我再次查询/fielddata端点,这里是结果:

curl -XGET 'localhost:9200/_cat/fielddata?v&fields=*'

id      host   ip            node  total  items.desc.raw some_bools...
tAB5... myhost 192.168.1.100 Yack  2.1mb  9.2kb          ...

所以fielddata的用法确实已大大降低(这很好),我看到的唯一字段是布尔字段(即some_bools以上),这是预期的,但令我惊讶的是,我的嵌套{{1} }字符串字段也出现了,但空间使用率要低得多。

not_analyzed仍然出现在fielddata缓存中的原因是什么?

1 个答案:

答案 0 :(得分:2)

不知怎的,我忘记了global ordinals。它们是我使用doc_values后仍然使用fielddata的原因,因为doc_values无法包含全局序数。

请参阅more details here

相关问题