Подтвердить что ты не робот

Elasticsearch удаляет дубликаты

Некоторые записи дублируются в моем индексе, идентифицированном числовым полем recordid.

В elasticsearch есть исключение по запросу, могу ли я использовать его для удаления любой из двух повторяющихся записей?

Или какой-то другой способ достичь этого?

4b9b3361

Ответ 2

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

curl -XPOST http://localhost:9200/your_index/_search -d '
 {
  "size": 0,
  "aggs": {
    "duplicateCount": {
      "terms": {
        "field": "recordid",
        "min_doc_count": 2,
        "size": 10
      },
      "aggs": {
        "duplicateDocuments": {
          "top_hits": {
            "size": 10
          }
        }
      }
    }
  }
}'

затем удалите дублированные документы, предпочтительно, используя массовый запрос. Посмотрите es-deduplicator для автоматического удаления дубликатов (отказ от ответственности: я являюсь автором этого script).

ПРИМЕЧАНИЕ. Совокупные запросы могут быть очень дорогими и могут привести к сбою ваших узлов (в случае, если ваш индекс слишком большой, а количество узлов данных слишком мало).

Ответ 3

Первая задача здесь - идентифицировать дубликаты документов. Для этого вам нужно запустить агрегирование терминов в полях, которые определяют уникальность документа. На втором уровне агрегации используйте top_hits, чтобы получить идентификатор документа. После того, как вы там, вы получите идентификатор документов, имеющих дубликаты.

Теперь вы можете безопасно удалить их, возможно, используя Bulk API.

Вы можете прочитать другие подходы к обнаружению и удалению дубликатов документов здесь.