Запрос диапазона Elasticsearch по номеру в строковом формате - PullRequest
2 голосов
/ 27 марта 2019

У меня есть 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 в формате String, я не могу получить документы. У меня нет привилегий, чтобы изменить index. Есть ли способ сделать запрос без изменения индекса?

1 Ответ

0 голосов
/ 27 марта 2019

Лучший способ: изменить тип поля на float

Но в любом случае, если вы хотите оставить тип поля строковым, вы можете использовать безболезненный сценарий для этого.т.е.

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"
          }
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...