Поиск с синонимами
Синонимы — это слова или фразы, имеющие одинаковое или близкое значение. Они являются важной частью поиска, поскольку могут улучшить пользовательский опыт и расширить охват результатов поиска.
Синонимы позволяют:
- Улучшить релевантность поиска, находить релевантные документы, использующие разные термины для выражения одного и того же понятия.
- Сделать специфичную для предметной области лексику более удобной для пользователя, позволяя пользователям использовать термины, с которыми они более знакомы.
- Определить распространенные орфографические ошибки и опечатки для прозрачной обработки распространенных ошибок.
Синонимы группируются с помощью наборов синонимов. Вы можете создать столько наборов синонимов, сколько вам нужно.
Для использования наборов синонимов в Elasticsearch необходимо:
Сохранить ваш набор синонимов
Наборы синонимов должны быть сохранены в Elasticsearch, чтобы ваши анализаторы могли на них ссылаться. Существует три способа сохранить ваши наборы синонимов:
API синонимов
Вы можете использовать API синонимов для управления наборами синонимов. Это наиболее гибкий подход, так как он позволяет динамически определять и изменять наборы синонимов.
Изменения в ваших наборах синонимов автоматически перезагрузят связанные анализаторы.
Файл синонимов
Вы можете сохранить ваш набор синонимов в файле.
Файл набора синонимов должен быть загружен на все узлы кластера и находиться в каталоге конфигурации вашего распределения Elasticsearch. Если вы используете Elasticsearch Service, вы можете загрузить файлы синонимов с помощью настраиваемых пакетов.
Пример файла синонимов:
# Blank lines and lines starting with pound are comments. # Explicit mappings match any token sequence on the left hand side of "=>" # and replace with all alternatives on the right hand side. # These types of mappings ignore the expand parameter in the schema. # Examples: i-pod, i pod => ipod sea biscuit, sea biscit => seabiscuit # Equivalent synonyms may be separated with commas and give # no explicit mapping. In this case the mapping behavior will # be taken from the expand parameter in the token filter configuration. # This allows the same synonym file to be used in different synonym handling strategies. # Examples: ipod, i-pod, i pod foozball , foosball universe , cosmos lol, laughing out loud # If expand==true in the synonym token filter configuration, # "ipod, i-pod, i pod" is equivalent to the explicit mapping: ipod, i-pod, i pod => ipod, i-pod, i pod # If expand==false, "ipod, i-pod, i pod" is equivalent # to the explicit mapping: ipod, i-pod, i pod => ipod # Multiple synonym mapping entries are merged. foo => foo bar foo => baz # is equivalent to foo => foo bar, baz
Для обновления существующего набора синонимов загрузите новые файлы в свой кластер. Файлы наборов синонимов должны синхронизироваться на каждом узле кластера.
При обновлении набора синонимов необходимо обновить использующие его анализаторы поиска с помощью API перезагрузки анализаторов поиска
Эта ручная синхронизация и перезагрузка делает этот подход менее гибким, чем использование API синонимов.
Встроенный
Вы можете протестировать свои синонимы, добавив их непосредственно в определение фильтра токенов.
Встроенные синонимы не рекомендуются для использования в рабочей среде. Большое количество встроенных синонимов излишне увеличивает размер кластера и может привести к проблемам производительности.
Настройка фильтров токенов и анализаторов синонимов
После создания наборов синонимов вы можете начать настройку фильтров токенов и анализаторов для их использования.
Наборы синонимов должны существовать до того, как они могут быть добавлены в индексы. Если индекс создается с ссылкой на несуществующий набор синонимов, индекс останется в частично созданном и неработоспособном состоянии. Единственный способ восстановиться в этой ситуации — убедиться, что набор синонимов существует, а затем либо удалить и пересоздать индекс, либо закрыть и открыть индекс.
Некорректные правила синонимов могут привести к ошибкам при применении изменений анализатора. Для перезагружаемых анализаторов это препятствует перезагрузке и применению изменений. Вы должны исправить ошибки в правилах синонимов и перезагрузить анализатор.
Индекс с некорректными правилами синонимов не может быть открыт, что делает его неработоспособным, когда:
- Узел, содержащий индекс, запускается
- Индекс открывается из закрытого состояния
- Происходит перезапуск узла (что приводит к повторному открытию фрагментов, назначенных узлу)
Elasticsearch использует синонимы в рамках процесса анализа. Вы можете использовать два типа фильтров токенов для включения синонимов:
- Граф синонимов: Рекомендуется использовать его, так как он правильно обрабатывает многословные синонимы («hurriedly», «in a hurry»).
- Синоним: Не рекомендуется, если вам нужно использовать многословные синонимы.
Проверьте документацию каждого фильтра токенов синонимов для получения подробной информации о конфигурации и инструкции по его добавлению в анализатор.
Тестирование анализатора
Вы можете протестировать конфигурацию анализатора, не изменяя настройки вашего индекса. Используйте API анализа для тестирования вашей цепочки анализаторов:
resp = client.indices.analyze(
tokenizer="standard",
filter=[
"lowercase",
{
"type": "synonym_graph",
"synonyms": [
"pc => personal computer",
"computer, pc, laptop"
]
}
],
text="Check how PC synonyms work",
)
print(resp) response = client.indices.analyze(
body: {
tokenizer: 'standard',
filter: [
'lowercase',
{
type: 'synonym_graph',
synonyms: [
'pc => personal computer',
'computer, pc, laptop'
]
}
],
text: 'Check how PC synonyms work'
}
)
puts response const response = await client.indices.analyze({
tokenizer: "standard",
filter: [
"lowercase",
{
type: "synonym_graph",
synonyms: ["pc => personal computer", "computer, pc, laptop"],
},
],
text: "Check how PC synonyms work",
});
console.log(response); GET /_analyze
{
"tokenizer": "standard",
"filter" : [
"lowercase",
{
"type": "synonym_graph",
"synonyms": ["pc => personal computer", "computer, pc, laptop"]
}
],
"text" : "Check how PC synonyms work"
} Применение синонимов во время индексирования или поиска
Анализаторы могут применяться в режиме индексирования или поиска.
Вам необходимо решить, когда применять синонимы:
- Время индексирования: синонимы применяются при индексировании документов в Elasticsearch. Это менее гибкий вариант, так как изменения в ваших синонимах требуют переиндексирования.
- Время поиска: синонимы применяются при выполнении поиска. Это более гибкий подход, который не требует переиндексирования. Если фильтры токенов сконфигурированы с
"updateable": true, анализаторы поиска могут быть перезагружены при внесении изменений в ваши синонимы.
Наборы синонимов, созданные с помощью API синонимов, могут использоваться только во время поиска.
Вы можете указать анализатор, содержащий ваш набор синонимов, в качестве анализатора поиска или как анализатор индексирования.
Следующий пример добавляет my_analyzer в качестве анализатора поиска к полю title в схеме индекса:
{
"mappings": {
"properties": {
"title": {
"type": "text",
"search_analyzer": "my_analyzer"
}
}
},
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "whitespace",
"filter": [
"synonyms_filter"
]
}
},
"filter": {
"synonyms_filter": {
"type": "synonym",
"synonyms_path": "analysis/synonym-set.txt",
"updateable": true
}
}
}
}
}
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/search-with-synonyms.html