我有一个假设的ElasticSearch索引,其中包含有关各种系统上用户配置的信息。所有系统的配置均使用相同的字段/值,用户具有一组默认配置选项,如果未为系统设置自定义选项,将使用这些默认配置选项,并且为了减少空间,我想避免重复默认值。
考虑以下示例ElasticSearch文档源对象:
{
userId: 12345,
default: {
columnWidth: 250,
rowHeight: 100,
pageSize: 50,
autoRefreshInterval: 60
},
systems: {
systemA: {
autoRefreshInterval: 0,
pageSize: 500
},
systemB: {
columnWidth: 400
}
}
}
通过userID提取此文档非常容易,但是如果我想对用户如何使用系统进行一些查询怎么办?如果我想找到所有不对systemB使用自动刷新的用户,我将不得不查询
systems.systemB.autoRefreshInterval:0 OR (_missing_:systems.systemB.autoRefreshInterval AND default.autoRefreshInterval:0)
,它很冗长,并且一次查询多个属性是一场噩梦。有什么方法可以配置索引映射以设置默认或后备字段,这将允许我简单地查询systems.systemB.autoRefreshInterval:0
并取回该文档,因为默认值设置正确吗? 最佳答案
经过大量阅读文档,论坛和询问之后,我确定这不是ElasticSearch支持的用例。为了做到这一点,我要么不得不处理额外的存储空间,然后将默认值复制到各个系统,要么编写一些非常冗长而丑陋的查询。