Elasticsearch:查找任何对象属性大于0的文档

时间:2016-10-26 09:43:57

标签: elasticsearch

我正在尝试搜索符合此条件的任何文档:

索引的文件:

{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。

看起来很简单,但我没有找到任何成功的方法,无需编写脚本。

谢谢!

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)非常明显。但是,将映射更改为嵌套将强制您重新索引数据并调整一些当前查询。