Фильтр токенов синонимов
Фильтр токенов synonym_graph позволяет легко обрабатывать синонимы, включая многословные синонимы, во время процесса анализа.
Для правильной обработки многословных синонимов этот фильтр токенов создаёт поток токенов графа графа токенов во время обработки. Для получения дополнительной информации по этой теме и её различным сложностям, пожалуйста, ознакомьтесь со статьёй блога Lucene’s TokenStreams are actually graphs.
Этот фильтр токенов предназначен для использования в качестве части анализатора поиска. Если вы хотите применить синонимы во время индексирования, пожалуйста, используйте стандартный фильтр токенов синонимов.
Синонимы настраиваются с помощью файла конфигурации. Вот пример:
PUT /test_index
{
"settings": {
"index": {
"analysis": {
"analyzer": {
"search_synonyms": {
"tokenizer": "whitespace",
"filter": [ "graph_synonyms" ]
}
},
"filter": {
"graph_synonyms": {
"type": "synonym_graph",
"synonyms_path": "analysis/synonym.txt"
}
}
}
}
}
} Выше указана конфигурация фильтра search_synonyms с путём analysis/synonym.txt (относительно местоположения config). Анализатор search_synonyms затем настроен с этим фильтром.
Дополнительные настройки:
-
expand(по умолчаниюtrue). -
lenient(по умолчаниюfalse). Еслиtrueигнорирует исключения при разборе конфигурации синонимов. Важно отметить, что игнорируются только те правила синонимов, которые не могут быть обработаны. Например, рассмотрим следующий запрос:
PUT /test_index
{
"settings": {
"index": {
"analysis": {
"analyzer": {
"synonym": {
"tokenizer": "standard",
"filter": [ "my_stop", "synonym_graph" ]
}
},
"filter": {
"my_stop": {
"type": "stop",
"stopwords": [ "bar" ]
},
"synonym_graph": {
"type": "synonym_graph",
"lenient": true,
"synonyms": [ "foo, bar => baz" ]
}
}
}
}
}
} При вышеуказанном запросе слово bar пропускается, но отображение foo => baz всё равно добавляется. Однако, если добавляемое отображение было foo, baz => bar, ничего не было бы добавлено в список синонимов. Это потому, что целевое слово для отображения само удаляется, так как это стоп-слово. Аналогично, если отображение было «bar, foo, baz», и expand было установлено на false, ни одно отображение не было бы добавлено, поскольку при expand=false целевое отображение является первым словом. Однако, если expand=true, то добавленные отображения были бы эквивалентны foo, baz => foo, baz, то есть все отображения, кроме стоп-слова.
tokenizer и ignore_case устарели
Параметр tokenizer контролирует токенизаторы, которые будут использоваться для токенизации синонима; этот параметр предназначен для обратной совместимости для индексов, созданных до 6.0. Параметр ignore_case работает только с параметром tokenizer.
Поддерживаются два формата синонимов: Solr, WordNet.
Синонимы Solr
Ниже приведён пример формата файла:
# Blank lines and lines starting with pound are comments. # Explicit mappings match any token sequence on the LHS of "=>" # and replace with all alternatives on the RHS. 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 schema. 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, "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
Вы также можете определить синонимы для фильтра непосредственно в файле конфигурации (обратите внимание на использование synonyms вместо synonyms_path):
PUT /test_index
{
"settings": {
"index": {
"analysis": {
"filter": {
"synonym": {
"type": "synonym_graph",
"synonyms": [
"lol, laughing out loud",
"universe, cosmos"
]
}
}
}
}
}
} Однако рекомендуется определять большие наборы синонимов в файле, используя synonyms_path, потому что указание их в строке ненужно увеличивает размер кластера.
Синонимы WordNet
Синонимы, основанные на формате WordNet, можно объявить, используя format:
PUT /test_index
{
"settings": {
"index": {
"analysis": {
"filter": {
"synonym": {
"type": "synonym_graph",
"format": "wordnet",
"synonyms": [
"s(100000001,1,'abstain',v,1,0).",
"s(100000001,2,'refrain',v,1,0).",
"s(100000001,3,'desist',v,1,0)."
]
}
}
}
}
}
} Использование synonyms_path для определения синонимов WordNet в файле также поддерживается.
Разбор файлов синонимов
Elasticsearch будет использовать фильтры токенов, предшествующие фильтру синонимов в цепочке токенизатора, для разбора записей в файле синонимов. Например, если фильтр синонимов размещён после стеммера, то стеммер также будет применяться к записям синонимов. Поскольку записи в карте синонимов не могут иметь сложенные позиции, некоторые фильтры токенов могут вызвать проблемы. Фильтры токенов, которые производят несколько версий токена, могут выбирать, какую версию токена выводить при разборе синонимов, например, asciifolding будет производить только свёрнутую версию токена. Другие, например, multiplexer, word_delimiter_graph или ngram, выдадут ошибку.
Если вам нужно создать анализаторы, которые включают как фильтры многотокенов, так и фильтры синонимов, рассмотрите использование фильтра мультиплексора с фильтрами многотокенов в одном ответвлении и фильтром синонимов в другом.
Правила синонимов не должны содержать слова, удаляемые фильтром, который появляется позже в цепочке (например, фильтр stop). Удаление термина из правила синонима нарушает соответствие во время запроса.
© 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/7.17/analysis-synonym-graph-tokenfilter.html