Как сопоставить одно слово из поискового запроса в Elasticsearch

Допустим, у меня есть поле под названием complexId и имеет значение со специальными символами: fruit/1a.445/2.10.mango, Поэтому, когда я ищу что-то вроде Complex ID fruit/1a.445/2.10.mangoЯ должен быть в состоянии получить результат.

Я хочу, чтобы эластичный поиск соответствовал хотя бы одному из этих трех слов:

1. Complex 
2. ID 
3. fruit/1a.445/2.10.mango

Например: - Ниже приведены мои два документа:

{
   "name": "Joe",
   "complexId": "fruit/1a.445/2.10.mango"
},
{
   "name": "Matt",
   "complexId": "car/35.6a5/chevy.20"
}

Пользователь ищет что-то вроде blah blah blah fruit/1a445/mango blah blah и он должен получить следующий результат:

{
   "name": "Matt",
   "complexId": "fruit/1a.445/2.10.mango"
}

Я попробовал это, но это не дает мне никакого результата:

{
   "query": {
      "bool": {
          "match" : 
          {
              complexId : "blah blah blah fruit/1a.445/2.10.mango blah blah"
          }
      }
   }
}

Поле complexId имеет стандартный анализатор.

Любая помощь будет оценена.

1 ответ

Решение

Стандартный анализатор не будет работать в вашем случае.

Поскольку у вас есть специальные символы, они будут игнорироваться при сохранении в ElasticSearch. Попробуйте использовать whitespace Анализатор вместо.

POST _analyze
{
  "analyzer": "whitespace",
  "text": "blah blah blah fruit/1a.445/2.10.mango blah blah"
}

Поиграйте с различными анализаторами и найдите тот, который лучше всего подходит для ваших нужд.

Вы также можете создать свой собственный анализатор.

Другие вопросы по тегам