Да, вы можете использовать top_hits агрегации, как показано в документации ссылке ниже
https://www.elastic.co/guide/en/elasticsearch/reference/1.7/search-aggregations-metrics-top-hits-aggregation.html
EDIT
Я стараюсь сделать все возможное, чтобы показать, как это сделать. Прежде всего, я надеюсь, вы ваши контакты сохранены в своих документах
1. Создание выполните картирование
{
"dynamic": true,
"_all": {
"enabled": false
},
"properties":{
"user_id" : {
"type": "integer"
},
"contact_type" : {
"type":"string",
"index": "not_analyzed"
}
}
}
2. Вставьте документы
использовать это в качестве шаблона для создания нескольких документов (изменить текст, число и дату)
{
"user_id": 5,
"contact_type": "email"
}
3. Запрос сам
{
"query": {
"term": {
"contact_type":{
"value":"email"
}
}
},
"aggs": {
"contact-counts": {
"terms": {
"field": "user_id"
}
}
}
}
4.See результат
поиск для агрегирование ключ и контакт-отсчеты в нем
это должно выглядеть примерно так
"aggregations": {
"contact-counts": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": 4, // user_id
"doc_count": 1 // document count
}
]
}
}
Надеюсь, это поможет! :)
EDIT
В конце концов, вам не нужно top_hits агрегацию, сама :) просто агрегацию
Вы пробовали то, что я предложил? Это не так сложно, как кажется. –
Я не могу составить равный эластичный запрос, не совсем понятно, как это сделать. Не могли бы вы написать несколько примеров? – Yokbb
См. Мой отредактированный ответ :) –