2015-04-20 4 views
0

У меня есть объекты, некоторые из которых сгруппированы по «masterID». Мне нужен агрегирование/запрос, который показывает мне как результат с наивысшей «релевантностью» для каждой группы объектов по «masterID».Объединение скоплений в упругом поиске

С агрегированием термина «masterID» я могу получить ведра для каждого «masterID». Но как мне получить самый высокий объект «релевантности» в каждом ведре?

Запросы до сих пор являются:

curl -XGET 'http://localhost:9200/pwo/_search?search_type=count&size=0&pretty=true' -d '{ 
    "aggregations": { 
    "masterIDs": { 
     "terms": { 
     "field": "masterID", 
     "size": 0 
     } 
    } 
    } 
} 
' 

и

curl -XGET 'http://localhost:9200/pwo/_search?size=0&pretty=true' -d '{ 
    "aggregations": { 
    "relevance": { 
     "max": { 
     "field": "relevance" 
     } 
    } 
    } 
} 
' 

Есть ли способ решить эту проблему с помощью одного запроса?

+1

Да! вы можете добавить блок агрегации «релевантности» в блоке «masterIDs» – eliasah

+0

Спасибо, это сработало нормально. Любой способ вставить поле '_id' объекта с максимальной «релевантностью» на выход? – TeTeT

+0

Кажется, что работает с агрегацией top_hits, добавленной к агрегации релевантности. – TeTeT

ответ

1

Вы можете добавить агрегации блок уместность в masterIDs блоке, как следующее:

curl -XGET 'http://localhost:9200/pwo/_search?size=0&pretty=true' -d '{ 
    "aggregations": { 
    "masterIDs": { 
     "terms": { 
     "field": "masterID", 
     "size": 0 
     }, 
     "aggregations": { 
     "relevance": { 
      "max": { "field" : "relevance" } 
     }, 
     "aggregations": { 
      "top_hits": { 
      "size": 1 
      } 
     } 
     } 
    } 
    } 
} 
' 
Смежные вопросы