我正在研究两种在Elastic Search中存储数据的方式。
[
{
'first': 'dave',
'last': 'jones',
'age': 43,
'height': '6ft'
},
{
'first': 'james',
'last': 'smith',
'age': 43,
'height': '6ft'
},
{
'first': 'bill',
'last': 'baker',
'age': 43,
'height': '6ft'
}
]
或
[
{
'first': ['dave','james','bill'],
'last': ['jones','smith','baker']
'age': 43,
'height': '6ft'
}
]
(名称为+30个字符的散列。嵌套不会超过上述字符)
我的目标是:
我们正在谈论300Gb和1 TB之间的区别。
我的问题是,Elastic Search可以像平铺数据一样快地搜索嵌套数据吗?
答案 0 :(得分:1)
默认情况下,Elasticsearch将flatten your arrays of objects,如您在示例中演示的那样:
内部对象字段的数组无法按您期望的方式工作。 Lucene没有内部对象的概念,因此Elasticsearch将对象层次结构简化为字段名称和值的简单列表。
因此,从查询的角度来看,什么都不会改变。 (但是,如果您需要查询内部数组的各个项目,例如查询dave jones
,则可能希望将其显式索引为nested
数据类型,这会降低性能。)>
谈到磁盘的大小,默认情况下启用压缩。在这里,您应该记住,Elasticsearch将同时以两种方式存储您的原始文档:原始JSON为source
,并隐式存储在反向索引中(实际上用于超快速搜索)。
如果您想了解有关调整磁盘使用情况的更多信息,请here's上一个不错的文档页面。例如,您可以为source
启用更积极的压缩,或者根本不将source
存储在磁盘上(尽管不建议这样做)。
希望有帮助!