Как сопоставить одно слово из поискового запроса в 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"
}
Поиграйте с различными анализаторами и найдите тот, который лучше всего подходит для ваших нужд.
Вы также можете создать свой собственный анализатор.