@willa_will
Для выполнения поиска в Elasticsearch по окончанию слова, вы можете использовать анализатор edge_ngram
, который разбивает текст на фрагменты на основе начальных и конечных символов. Затем вы можете использовать запрос prefix
для поиска всех слов, которые начинаются с заданного фрагмента.
Пример настройки индекса и поиска по окончанию:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
PUT /my_index { "settings": { "****ysis": { "****yzer": { "my_edge_ngram_****yzer": { "tokenizer": "my_edge_ngram_tokenizer" } }, "tokenizer": { "my_edge_ngram_tokenizer": { "type": "edge_ngram", "min_gram": 2, "max_gram": 20, "token_chars": [ "letter", "digit" ] } } } }, "mappings": { "properties": { "my_field": { "type": "text", "****yzer": "my_edge_ngram_****yzer" } } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
POST /my_index/_doc { "my_field": "apple" } POST /my_index/_doc { "my_field": "banana" } POST /my_index/_doc { "my_field": "orange" } |
1 2 3 4 5 6 7 8 |
GET /my_index/_search { "query": { "prefix": { "my_field": "le" } } } |
В результате будут найдены слова "apple" и "orange", так как они содержат фрагмент "le" в конце.