Эластичный поисковый запрос Где существует значение между 2 значениями поля - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь выяснить, как построить запрос на основе упругого поиска, где значение запроса существует в диапазоне двух значений поля.

Допустим, у меня есть шаблон

{
     "template": "addresses",
     "mappings": { 
         "addresses": {
             "properties": {
                   "street_number_1": { "type": "integer" },
                   "street_number_2": { "type": "integer" },
                    ... //other unimportant fields
              }
          }
 }

На основе приведенного выше определения, если у меня есть адрес 100-120 Хай-стрит, где street_number_1 равен 100, а street_number_2 равен 120, если ядолжны были выполнить поиск на 112 High Street, эта запись должна быть возвращена в диапазоне от 100 до 120. Какой тип функции / запроса эластичного поиска позволил бы мне сделать это?

1 Ответ

0 голосов
/ 29 мая 2018

У вас есть два варианта.С вашим текущим отображением вы можете использовать два запроса диапазона , например:

{
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "street_number_1": {
              "lte": 112
            }
          }
        },
         {
          "range": {
            "street_number_2": {
              "gte": 112
            }
          }
        }
      ]
    }
  }
}

Второй вариант предполагает изменение вашего отображения для использования целого диапазона для улицычисло.Определите свое сопоставление номеров улиц следующим образом:

PUT addresses
{
  "mappings": {
    "_doc": {
      "properties": {
        "street_number": {
          "type": "integer_range"
        }
      }
    }
  }
}

Затем индексируйте свой адресный документ следующим образом:

PUT addresses/_doc/1
{
  "street_number" : { 
    "gte" : 100,
    "lte" : 120
  }
}

И, наконец, запросите его следующим образом:

POST addresses/_search
{
  "query" : {
    "term" : {
      "street_number" : {
        "value": 112
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...