文档中的空字段是否占用了elasticsearch中的空格?

时间:2014-09-22 07:42:31

标签: elasticsearch

文档中的空字段是否会占用elasticsearch中的空格? 例如,在下面的情况中,用于存储文档的空间总量与案例B中的情况A相同(假设在映射中定义了“颜色”字段)。

Case A
    {"features":
      "price": 1,
      "colors":[]
    }

Case B
    {"features":
      "price": 1,
    }

1 个答案:

答案 0 :(得分:4)

如果保留默认设置,原始文档存储在_source字段中,则会有区别,因为案例A的原始文档大于案例B.

否则,应该没有区别:对于案例A,在colors字段的索引中没有添加任何术语,因为它是空的。

您可以使用 _size 字段查看索引的原始文档的大小,即_source字段的大小:

POST stack
{
  "mappings":{
    "features":{
      "_size": {"enabled":true, "store":true},
      "properties":{
        "price":{
          "type":"byte"
        },
        "colors":{
          "type":"string"
        }
      }
    }
  }
}

PUT stack/features/1
{
  "price": 1
}

PUT stack/features/2
{
  "price": 1,
  "colors": []
}

POST stack/features/_search
{
  "fields": [
    "_size"
  ]
}

最后一个查询将输出此结果,显示文档2占用的空间超过1:

{
   "took": 1,
   "timed_out": false,
   "_shards": {
      "total": 5,
      "successful": 5,
      "failed": 0
   },
   "hits": {
      "total": 2,
      "max_score": 1,
      "hits": [
         {
            "_index": "stack",
            "_type": "features",
            "_id": "1",
            "_score": 1,
            "fields": {
               "_size": 16
            }
         },
         {
            "_index": "stack",
            "_type": "features",
            "_id": "2",
            "_score": 1,
            "fields": {
               "_size": 32
            }
         }
      ]
   }
}