Получить уникальные записи для нескольких полей в упругом поиске версии 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 в перспективе агрегации.

Другие вопросы по тегам