2015-01-19 2 views
0

Я пытаюсь написать запрос Elasticsearch, где я сопоставляю несколько слов в своем названии и описании. Приведенный ниже код работает отлично, но он дает все статьи, соответствующие этим словам. Моя цель: мне нужно 4 статьи за слово запроса, например. 4 результаты Тим Кук и четыре статьи Стива ДжобсаElasticsearch Многопользовательские запросы с ограничением

{ 
    "query": { 
     "multi_match": { 
      "query": ["Tim Cook","Steve Jobs"], 
      "fields": ["Title", "Description" ], 
      "operator":"AND" 
     } 
    } 
} 
+0

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

+0

Мне нужно 8 результатов, которые образуют один запрос, из которых 4 результата должны быть из Тима Кука, а четыре результата - Стив Джобс. – Ironman

+0

'{ "запрос": { "multi_match": { "запрос": [ "Тим Кук"], "полей": [ "Название", "Описание"], "оператор":" И " \t \t \t \t \t} \t \t \t \t \t \t}, "размер": 4 }, { "запрос": { "multi_match": { "запрос": [ "Стив Джобс"], "полей": [ "Название", "Описание"], "оператор": "И" \t \t \t \t \t} \t \t \t \t \t \t }, «размер»: 4 } 'Я пробовал приведенный выше код, он возвращает результат только для первого запроса. – Ironman

ответ

1

Top hits aggregations, что вы ищете - основном дают 2 filter aggregation, а затем гнездо сверху бьет агрегацию сторону им.

Так что-то вроде ниже должно работать нормально

{ 
    "size": 0, 
    "query": { 
    "multi_match": { 
     "query": [ 
     "Tim Cook", 
     "Steve Jobs" 
     ], 
     "fields": [ 
     "Title", 
     "Description" 
     ], 
     "operator": "AND" 
    } 
    }, 
    "aggs": { 
    "tim": { 
     "aggs": { 
     "top_hits": {} 
     }, 
     "filter": { 
     "query": { 
      "multi_match": { 
      "query": [ 
       "Tim Cook" 
      ], 
      "fields": [ 
       "Title", 
       "Description" 
      ], 
      "operator": "AND" 
      } 
     } 
     } 
    }, 
    "steve": { 
     "aggs": { 
     "top_hits": {} 
     }, 
     "filter": { 
     "query": { 
      "multi_match": { 
      "query": [ 
       "Steve Jobs" 
      ], 
      "fields": [ 
       "Title", 
       "Description" 
      ], 
      "operator": "AND" 
      } 
     } 
     } 
    } 
    } 
} 
+0

Мне не нужны лучшие хиты Мне нужны только последние записи. 4 записи по каждому ключевому слову. – Ironman

+0

Лучшие хиты дают вам, что –

+0

Приведенный выше код не работает. – Ironman

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