Получить уникальные записи для нескольких полей в упругом поиске версии 6.2.3
Я новичок в упругом поиске. Использование версии 6.2.3 упругого поиска. Я хочу эластичный поиск эквивалент ниже SQL-запроса:
SELECT DISTINCT customer_name , customer_services, customer_visible from customers;
У меня около 200 тысяч документов в упругом поиске. Я хочу уникальные записи для нескольких полей из документа. Эти поля являются customer_name, customer_services, customer_visible
Я не ищу счетчик, я хочу получить данные для указанных полей без дубликатов данных для каждого поля.
Я пробовал несколько запросов, но это не дает мне уникальный для всех полей. Пожалуйста, помогите мне в обеспечении эластичного поиска 6.2.3 эквивалентного запроса для выше sql.
2 ответа
Ниже приведен рабочий эквивалентный запрос ES 6.3, который работал для меня.
{
"size": 0,
"aggs": {
"company_details": {
"terms": {
"size": 10000,
"script": "doc['customer_global_cust_id'].value + ' | ' + doc['customer_name'].value + ' | ' + doc['customer_visible'].value + ' | ' +doc['customer_services'].values"
}
}
}
}
Выше я использовал значения для customer_services, так как это поле массива в документе, остальные поля - просто строковые значения, поэтому используется значение.
Я не эксперт, но, насколько мне известно, если вы хотите сделать выборку отличительной только для одного поля, то вы могли бы использовать термин агрегирование
Но, глядя на этот пост, в Elasticsearch агрегирование терминов по нескольким полям не поддерживается, потому что оно не будет иметь хорошей производительности. Вы можете посмотреть на решение, предлагаемое в той же ссылке об использовании script
в перспективе агрегации.