一尘不染

在字段数据缓存中仍具有doc_values的not_analyzed字段

elasticsearch

在对fielddata与doc_values进行的一些实验中,我遇到了一个奇怪的情况。在我以前的映射中,我根本没有使用doc值。在新的映射中,我已添加doc_values: true到映射中的所有字段,但分析的字符串字段和布尔值(直到2.0才受支持)除外。

因此,详细而言,这是我的处理方式:

重新索引所有数据之前,我重新启动了ES
1.7集群,并使用排序,聚合和脚本字段运行查询以“预热”字段数据缓存。然后,我询问/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: trueitems.desc.raw,重新索引整个索引并运行一些聚合,再次排序和编写脚本以预热字段数据缓存之后,我/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是预期的布尔字段(即上面的字段),但令我惊讶的是,我的嵌套not_analyzed字符串字段也出现了,但是空间使用率却低得多。

items.desc.raw仍然出现在字段数据缓存中的原因可能是什么?


阅读 176

收藏
2020-06-22

共1个答案

一尘不染

我莫名其妙地忘记了全球常规。这就是为什么即使使用doc_values全局序号后仍不能包含,我仍然获得字段数据使用率的原因doc_values

在这里查看更多详细信息

2020-06-22