Elasticsearch范围查询字符串格式的数字

时间:2019-03-27 10:00:15

标签: elasticsearch

我有一个Elasticsearch索引,如下所示

{
  "Price": "50.99"
},
{
  "Price": "30.99"
},
{
  "Price": "40.99"
},
{
  "Price": "10.99"
}

我正在尝试根据price的范围来获取文档。我想退回价格范围为30-100的文件。但是它没有返回任何文档。

 GET index_name/_search
 {
  "query": {
    "bool": {
      "must": [
        { "range": {"Price": {"gte": 40, "lte": 100}}}
      ]
    }
  }
}

由于Price为字符串格式,因此无法提取文档。我没有更改index的权限。有没有一种方法可以查询它而不更改索引?

1 个答案:

答案 0 :(得分:0)

最佳方法:将字段类型更改为浮动

但是无论如何,如果要保持字段类型为字符串,可以使用无痛脚本来实现。即

GET index_name/_search
{
  "query": {
    "bool": {
      "must": {
        "script": {
          "script": {
            "inline": "Float.parseFloat(doc['Price.keyword'].value) >= 40 && Float.parseFloat(doc['Price.keyword'].value) <= 100",
            "lang": "painless"
          }
        }
      }
    }
  }
}