我正在尝试搜索符合此条件的任何文档:
索引的文件:
{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。
看起来很简单,但我没有找到任何成功的方法,无需编写脚本。
谢谢!
答案 0 :(得分:1)
{
"query": {
"query_string": {
"fields": [
"stock.*"
],
"query": "{0 TO *]"
}
}
}
答案 1 :(得分:1)
您的索引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)非常明显。但是,将映射更改为嵌套将强制您重新索引数据并调整一些当前查询。