文档中的空字段是否会占用elasticsearch中的空格? 例如,在下面的情况中,用于存储文档的空间总量与案例B中的情况A相同(假设在映射中定义了“颜色”字段)。
Case A
{"features":
"price": 1,
"colors":[]
}
Case B
{"features":
"price": 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
}
}
]
}
}