安装了 mapper-size 插件并将其添加到索引映射中,但索引中没有显示 _size 字段

0 elasticsearch

我们试图找出 Elasticsearch(版本 7.0.1)索引中的哪些文档消耗的磁盘空间最多。我们找到了Elastic提供的mapper-size插件。我们在所有 Elasticsearch 数据/主节点上安装了该插件,并在每个节点上重新启动了 ES 服务。我们还将 _size 字段添加到索引模式映射中。但是,_size 字段没有显示。该索引由我们的应用程序服务器上运行的多个 Filebeat 服务提供,并且该索引每晚都会滚动。

我们尝试创建一个与索引模式匹配的全新索引。_size 字段存在于映射中:

"application_log_test" : {
"mappings" : {
  "_size" : {
    "enabled" : true
  }
Run Code Online (Sandbox Code Playgroud)

然而,在添加了一些测试文档后,查询的文档中并没有显示_size字段。我们验证了所有 Elasticsearch 节点都加载了该插件:

[2019-09-16T15:10:45,103][INFO ][o.e.p.PluginsService     ] [node-name-1] loaded plugin [mapper-size]
Run Code Online (Sandbox Code Playgroud)

我们期望添加到索引的任何文档都可以计算并显示 _size 元数据字段。该字段不会显示在我们的输出中。

Val*_*Val 5

_size字段不会添加到您的源文档中。您可以查询它、聚合它、对其进行排序,但要实际查看它的值,您需要通过脚本字段来完成。尝试运行下面的查询,您将看到:

GET application_log_test/_search
{
  "query": {
    "range": {
      "_size": { 
        "gt": 10
      }
    }
  },
  "aggs": {
    "sizes": {
      "terms": {
        "field": "_size", 
        "size": 10
      }
    }
  },
  "sort": [
    {
      "_size": { 
        "order": "desc"
      }
    }
  ],
  "script_fields": {
    "size": {
      "script": "doc['_size']"  
    }
  }
}
Run Code Online (Sandbox Code Playgroud)