Анализатор ElasticSearch: есть ли способ удалить те же вхождения слов в индексе?

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

Пример: "Привет, мир! Привет, мистер!" где вы можете увидеть 2 раза "Привет".

Если я ищу "Hello World", я получу лучший результат с "Hello World Hello Mr!" чем "Привет, мир". Я не хочу такого поведения, даже если оно логично.

Итак, возможно ли удалить те же вхождения слов при индексации? Пример: "Привет, мир! Привет, мистер!" => "Привет, мир, мистер!"

Мое текущее отображение и настройки:

  settings index: { number_of_shards: 1, number_of_replicas: 1 }, analysis: {
    analyzer: {
      custom_analyzer: {
        tokenizer: "custom_tokenizer",
        filter: ["lowercase", "asciifolding", "custom_spliter"]
      }
    },
    filter: {
      custom_spliter: {
        type: "word_delimiter",
        preserve_original: "true"
      }
    },
    tokenizer: {
      custom_tokenizer: {
        type: "nGram",
        min_gram: "3",
        max_gram: "3",
        token_chars: [ "letter", "digit" ]
      }
    }
  } do
    mappings dynamic: 'false' do
      indexes :searchable, analyzer: "custom_analyzer"
    end
  end

Возможно ли это сделать?

1 ответ

Решение

Для этого вы можете добавить уникальный анализатор токенов в анализатор.
Это позволяет настроить так, чтобы вы могли удалять дубликаты токенов, встречающиеся в одной и той же позиции (например, синонимы) или в любой позиции.

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