我正在尝试搜索符合以下条件的任何文档:
索引文件:
{id:1,stock:{1123:4,1124:12,1125:15}}
{id:2,stock:{1454:12,1455:0}}
{id:3,stock:{}}
{id:4,stock:{2544:0,2545:0}}
我想查找任何库存属性大于0的文档,匹配的文档应为1和2。
看起来很简单,但是我没有找到成功的方法来编写这种脚本。
谢谢!
最佳答案
您的索引stocks
中有几个字段?
有很多字段会导致巨大的映射,这就是为什么Andrei Stefan提出的解决方案比较慢的原因。更糟糕的是,如果您的属性数量越来越多,则映射会越来越大,并且可能导致集群崩溃,这称为mapping explosion
存储包含许多不同键的数组的正确方法是使用nested mapping这样的:
stock: [
{"key": 1123, "value": 4}
{"key": 1124, "value": 12}
{"key": 1125, "value": 15}
]
通过这种数据结构,很明显可以构建请求的查询(使用nested filter搜索stock.value> 0)。但是,将映射更改为嵌套将迫使您重新索引数据并调整一些当前查询。
关于elasticsearch - Elasticsearch:查找任何对象属性大于0的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40258843/