2016-08-29 6 views
1

Можно ли это сделать в запросе ElasticSearch:Можно ли это сделать в запросе ElasticSearch?

SELECT COUNT(DISTINCT users_contacts.value) 
FROM users 
INNER JOIN users_contacts ON users_contacts.user_id = users.id 
WHERE users_contacts.type = "email" 

Без users_contacts.type = "email" состояние, я могу использовать агрегацию ValueCount.

+0

Вы пробовали то, что я предложил? Это не так сложно, как кажется. –

+0

Я не могу составить равный эластичный запрос, не совсем понятно, как это сделать. Не могли бы вы написать несколько примеров? – Yokbb

+0

См. Мой отредактированный ответ :) –

ответ

0

Да, вы можете использовать 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 агрегацию, сама :) просто агрегацию

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