2016-12-26 3 views
1

Как я могу найти документы, которые имеют все указанные теги в следующем запросе? Я попробовал minimum_should_match и «исполнение»: «и», но ни один из них не поддерживается в моем запросе.запрос elasticsearch для всех элементов массива

GET products/fashion/_search 
{ 
    "query": { 
    "constant_score": { 
     "filter" : { 
     "bool" : { 
      "must" : [ 
      {"terms" : { 
       "tags" : ["gucci", "dresses"] 
      }}, 
      {"range" : { 
       "price.value" : { 
       "gte" : 100, 
       "lt" : 1000 
       } 
      }} 
      ] 
     } 
     } 
    } 
    }, 
    "sort": { "date": { "order": "desc" }} 
} 

====== UPDATE

Я нашел способ, чтобы построить мои запросы. Задача состояла в том, чтобы воспроизвести следующий MongoDB запрос в elasticsearch:

{ 
    "tags": { 
    "$all":["gucci","dresses"] 
    }, 
    "price.value":{"$gte":100,"$lte":1000} 
} 

А вот мой elasticsearch запрос

GET products/fashion/_search 
{ 
    "query": { 
    "bool" : { 
     "filter" : [ 
     {"term" : { 
      "tags" : "gucci" 
     }}, 
     {"term" : { 
      "tags" : "dresses" 
     }}, 
     {"range" : { 
      "price.value" : { 
      "gte" : 100, 
      "lt" : 1000 
      } 
     }} 
     ] 
    } 
    } 
} 
+0

Можете ли вы предоставить нам с отображением и несколько образцов документов? – Yeikel

ответ

0

У вас есть отображение, определенное для индекса? По умолчанию Elasticsearch будет анализировать строковые поля. Если вы хотите найти точные условия, как вы выше, вам нужно указать их как not_analyzed в сопоставлении.

https://www.elastic.co/guide/en/elasticsearch/guide/current/_finding_exact_values.html#_term_filter_with_text

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