我正在研究两种在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可以像平铺数据一样快地搜索嵌套数据吗?
默认情况下,Elasticsearch将展平对象数组,就像您在示例中演示的那样:
内部对象字段的数组无法按您期望的方式工作。Lucene没有内部对象的概念,因此Elasticsearch将对象层次结构简化为字段名称和值的简单列表。
因此,从查询的角度来看,什么都不会改变。(但是,如果需要查询内部数组的各个项目(例如查询)dave jones
,则可能需要将其显式索引为nested
数据类型,这会降低性能。)
说到磁盘大小,默认情况下启用压缩。在这里,您应该记住,Elasticsearch将同时以两种方式存储您的原始文档:原始JSON作为source
,并隐式存储在反向索引中(实际上用于超快速搜索)。
如果您想了解有关调整磁盘使用情况的更多信息,请访问以下文档页面。例如,您可以为启用更积极的压缩source
,或者根本不存储source
在磁盘上(尽管不建议这样做)。
希望有帮助!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句