Поиск уникальных документов по индексу в упругом поиске - PullRequest
0 голосов
/ 28 марта 2019

У меня есть дубликаты записей в моем индексе, и я хочу найти только уникальные документы в индексе. Агрегация TopHits решает эту проблему, но другим моим требованием является поддержка сортировки результатов (по сегментам). Поэтому я не могу использовать агрегацию топ-хитов.
Другие варианты, которые я могу придумать, это написать плагин или использовать безболезненный скрипт. Нужна помощь, чтобы решить эту проблему. Было бы здорово, если бы вы могли перенаправить меня к некоторым примерам.

1 Ответ

1 голос
/ 29 марта 2019

Top hits агрегация находит значение из полного набора результатов, в то время как при использовании cardinality он дает только отфильтрованный набор результатов. Вы можете использовать агрегацию cardinality, как показано ниже:

{
    "aggs" : {
        "UNIQUE_COUNT" : {
            "cardinality" : {
                "field" : "your_field"
            }
        }
    }
}

Эта агрегация сопряжена с некоторой ответственностью. Чтобы лучше понять ее, ознакомьтесь с приведенной ниже документацией ElasticSearch. Ссылка: Агрегирование кардинальности

Для сортировки вы можете обратиться к приведенному ниже примеру, где вы можете передать агрегацию в порядке terms, для которого создан ваш сегмент:

{
    "aggs": {
        "AGG_NAME": {
            "terms": {
                "field": "you_field",
                "size": 10,
                "order": {
                    "UNIQUE_COUNT.doc_count": "asc"
                },
                "min_doc_count": 1
            },
            "aggs": {
                "UNIQUE_COUNT": {
                    "cardinality": {
                        "field": "your_field"
                    }
                }
            }    
        }
    }
}
...