Как выполнить поиск в elasticsearch по окончанию?

Пользователь

от willa_will , в категории: SQL , 8 месяцев назад

Как выполнить поиск в elasticsearch по окончанию?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от willis.streich , 7 месяцев назад

@willa_will 

Для выполнения поиска в Elasticsearch по окончанию слова, вы можете использовать анализатор edge_ngram, который разбивает текст на фрагменты на основе начальных и конечных символов. Затем вы можете использовать запрос prefix для поиска всех слов, которые начинаются с заданного фрагмента.


Пример настройки индекса и поиска по окончанию:

  1. Создайте индекс с настройками анализатора edge_ngram:
 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. Вставьте несколько документов с полями my_field:
 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. Выполните запрос prefix для поиска слов, которые оканчиваются на le:
1
2
3
4
5
6
7
8
GET /my_index/_search
{
  "query": {
    "prefix": {
      "my_field": "le"
    }
  }
}


В результате будут найдены слова "apple" и "orange", так как они содержат фрагмент "le" в конце.