2016-10-31 2 views
0

Допустим, у меня есть следующий индексированный документ:Elasticsearch запрос, чтобы найти диапазон перекрытия

{ 
    "field1": [400, 800] 
} 

Я хочу создать запрос с помощью 2 параметров поиска (min_val = 300 и max_val = 500), чтобы выбрать документы, где эти два диапазона перекрывается.

В моем примере выше документ должен быть выбран, как мы можем видеть:

300     500 
[======================] 
        [=====================] 
        400     800 

Что является наиболее эффективным способом, чтобы найти документы, которые перекрывают два числовых диапазонов? Я могу сделать это с помощью нескольких сравнений, и многие и и ors, но я ищу более простой и эффективный способ достижения этого.

+0

Вы пробовали [диапазон] (https://www.elastic.co/guide/en/elasticsearch/reference/5.0/query-dsl-range-query.html) фильтр? – ChintanShah25

ответ

1

В ES, диапазон номеров, как у вас есть для field1 не на самом деле диапазон, а просто два различных значения, а именно 400 и 800. Все, что вам нужно сделать, это использовать простой range query и сравнить field1 с нижней и верхняя граница диапазона, т.е.

  • диапазон [300, 500] должна включать в себя как 400 или 800

Выраженный с DSL, вы в конечном итоге с запросом одного диапазона, как этот:

{ 
    "query": { 
    "range": { 
     "field1": { 
     "gte": 300, 
     "lte": 500 
     } 
    } 
    } 
} 
+0

Он отлично работал, спасибо вам большое! – stefanobaldo

Смежные вопросы