Elasticsearch: поиск дубликатов по полю - PullRequest
0 голосов
/ 26 сентября 2018

Я работаю с эластичным поиском.Я получил коллекцию событий, где имена событий, например.FC Barcelona - Real Madrit, тогда где-нибудь в коллекции может быть Footbal Club Barcela - FC Real Madryt.

Мне нужно найти минимум 2 попадания без текста запроса.Я думаю, что здесь должны использоваться агрегация и токенайзер ngram, но я не уверен.

Вот мои настройки индекса:

{
        "settings": {
            "analysis": {
                "analyzer": {
                    "test": {
                        "tokenizer": "test",
                        "filter": ["lowercase", "word_delimiter", "nGram", "porter_stem"]
                        "token_chars": [
                            "letter",
                            "digit",
                            "whitespace"
                        ]
                    }
                },
                "tokenizer": {
                    "test": {
                        "type": "ngram",
                        "min_gram": 3,
                        "max_gram": 15,
                    }
                }
            }
        }
    }

И вот так выглядит мой текущий запрос:

{
  "size": 0,
  "aggs": {
    "duplicateNames": {
      "terms": {
        "field": "eventName",
        "min_doc_count": 2
      },
      "aggs": {
        "duplicateDocuments": {
          "top_hits": {}
        }
      }
    }
  }
}

А вот мое отображение:

{
            "event": {
                "properties": {
                    "eventName": {
                        "type": "keyword",
                        // fielddata: true
                    }
                }
            }
        }

Не могли бы вы указать мне правильное направление, пожалуйста?

1 Ответ

0 голосов
/ 26 сентября 2018

Вам не нужно nGrams, если вы ищете дубликаты.Вы захотите использовать тип keyword, как у вас.Вы можете использовать термины агрегации, как у вас уже есть.

POST <index_name>/event/_search
{
  "size": 0,
  "aggs": {
    "duplicateNames": {
      "terms": {
        "field": "eventName",
        "min_doc_count": 2
      },
      "aggs": {
        "duplicateDocuments": {
          "top_hits": {}
        }
      }
    }
  }
}

Дубликат eventName будет указан в агрегации duplicateEventNames.Документ _id будет в верхней части hits в каждом сегменте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...