Elasticsearch, как работает фильтр токенов синонимов, если синоним состоит из нескольких слов? - PullRequest
1 голос
/ 27 апреля 2020

Может кто-нибудь объяснить мне, как работает фильтр токенов синонимов, если синоним - это выражение из нескольких слов, а токенайзер - это пробел? Например, если у меня есть это простое отображение

PUT /test_index
{
    "settings": {
        "index" : {
            "analysis" : {
                "analyzer" : {
                    "synonym" : {
                        "tokenizer" : "whitespace",
                        "filter" : ["synonym"]
                    }
                },
                "filter" : {
                    "synonym_graph" : {
                        "type" : "synonym",
                        "lenient": true,
                        "synonyms" : ["multi word, bar => baz"]
                    }
                }
            }
        }
    }
}

Я не понимаю, как можно оценить термин мультислово , если токенайзер пробельных символов разбивает его на два слова мульти и слово. Поэтому, насколько я понимаю, фильтр синонимов никогда не получает " multi word " как один термин для поиска синонимов в конфигурации. Любая помощь приветствуется.

1 Ответ

1 голос
/ 28 апреля 2020

Ответ можно найти в этом разделе

https://www.elastic.co/guide/en/elasticsearch/reference/7.6/token-graphs.html

и в этом блоге

http://blog.mikemccandless.com/2012/04/lucenes-tokenstreams-are-actually.html

Некоторые фильтры токенов могут добавлять токены, которые занимают несколько позиций. Они могут включать в себя токены для синонимов, состоящих из нескольких слов, таких как использование «atm» в качестве синонима «automati c teller machine». Однако только некоторые фильтры токенов, известные как фильтры токенов графов, точно записывают positionLength для многопозиционных токенов.

Индексирование игнорирует атрибут positionLength и не поддерживает графы токенов, содержащие многопозиционные токены. Однако запросы, такие как запрос match или match_phrase, могут использовать эти графики для генерации нескольких подзапросов из одной строки запроса.

The following token filters can add tokens that span multiple positions but only record a default positionLength of 1:

- synonym
- word_delimiter

This means these filters will produce invalid token graphs for streams containing such tokens.

Avoid using invalid token graphs for search. Invalid graphs can cause unexpected search results.
...