2014-12-31 4 views
0

Есть ли способ в ElasticSearch запускать булевский фильтр, а затем без повторного поиска поиска сортировать/упорядочивать результаты на основе запроса multi_field?Фильтр затем сортировка результатов по запросу в ElasticSearch

Например: Получить все элементы с status_id = 1 (фильтром), а затем заказать эти документы, используя ключевые слова «красный автомобиль» (документы, в которых name и description содержат эти ключевые слова являются первыми документы без являются последними).

ответ

1

Вы можете использовать булев запрос - По условию из следует -

Оговорка (запрос) должен появиться в согласующего документ. В булевом запросе без обязательных условий один или несколько обязательных условий должны соответствовать документу. Минимальное количество обязательных статей, которые могут быть сопоставлены, можно установить с помощью параметра minimum_should_match.

В нашем случае, поскольку есть обязательное и его числовое совпадение, оценка не будет вычисляться. Но тогда будет использоваться условия должны для вычисления очков в одиночку -

{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "match": { 
      "status_id": 1 
      } 
     } 
     ], 
     "should": [ 
     { 
      "multi_match": { 
      "query": "red car", 
      "fields": [ 
       "subject", 
       "message" 
      ] 
      } 
     } 
     ] 
    } 
    } 
} 
+0

Я был на самом деле делает это, минус одна вещь, я делаю «должен», как часть фильтра, а не запроса. В результате это должно было само по себе и уменьшало набор результатов. – Ian

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