elasticsearch:如果数组字段至少有一个元素属于范围,则搜索条件

时间:2017-08-28 15:44:00

标签: search elasticsearch nested nosql

我在弹性搜索中有三个文件

{
  "_index": "test",
  "_type": "elem",
  "_id": "2",
  "_version": 1,
  "_score": 1,
  "_source": {
    "price": "[17,19,30]"
  }
}

{
  "_index": "test",
  "_type": "elem",
  "_id": "3",
  "_version": 1,
  "_score": 1,
  "_source": {
    "price": "[17,22,30]"
  }
} 

{
  "_index": "test",
  "_type": "elem",
  "_id": "1",
  "_version": 1,
  "_score": 1,
  "_source": {
    "price": "[1,2,3]"
  }
}

我在查询时

{
  "query" : {
    "filtered" : {
      "filter" : {
        "range" : {
          "price" :{
            "gte":20,
            "lte":25
          }
        }
      }
    }
  }
}

响应中不包含任何一个元素,如何查询获取确切结果? 我会

`{
  "_index": "test",
  "_type": "elem",
  "_id": "3",
  "_version": 1,
  "_score": 1,
  "_source": {
    "price": "[17,22,30]"
  }
}

`结果因为[20,25]范围内的22。 请帮我。提前谢谢。

1 个答案:

答案 0 :(得分:1)

您可以将文档存储起来:

{
  "prices": [
    {
      "price": 22
    },
    {
      "price": 20
    }
  ]
}

并使用以下方式查询:

{
  "query" : {
    "filtered" : {
      "filter" : {
        "range" : {
          "prices.price" :{
            "gte":20,
            "lte":25
          }
        }
      }
    }
  }
}