Анализатор 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 ответ
Для этого вы можете добавить уникальный анализатор токенов в анализатор.
Это позволяет настроить так, чтобы вы могли удалять дубликаты токенов, встречающиеся в одной и той же позиции (например, синонимы) или в любой позиции.