Разрешение поиска без учета регистра с помощью snowball_analyzer в Elasticsearch

Прежде всего, я совершенно новичок в ES. Я создал критерии поиска ES ниже для поиска элементов, которые работают нормально, но сейчас мне нужно включить делать поле нечувствительно к регистру, чтобы результат поиска был одинаковым для hello, HeLlo, HELLO скоро.

Я прочитал пост ниже, не могу спокойно применить к моему примеру ниже из-за моих очень ограниченных знаний:

Удаление not_analyzed от делать не помогает

'indexes' => [
'my_project' => [
'client' => 'default',
'index_name' => 'hello',
'settings' => [
'index' => [
'analysis' => [
'analyzer' => [
'snowball_analyzer' => [
'type' => 'snowball',
'language' => 'English',
],
],
],
],
],
'types' => [
'item' => [
'mappings' => [
'uuid' => ['type' => 'string', 'index' => 'not_analyzed'],
'name' => ['type' => 'string', 'boost' => 8, 'analyzer' => 'snowball_analyzer'],
'make' => ['type' => 'string', 'index' => 'not_analyzed'],
]
],
],
],
],

Это запрос, который я создал:

1

{
"query": {
"filtered": {
"query": {
"bool": {
"must": [
{
"term": {
"make": "HeLlo"}
}
]
}
}
}
}
}

0

Решение

Вы должны добавить «строчные» фильтр. Вот выдержка для подобной конфигурации, которую я использую:

settings:
index:
analysis:
analyzer:
custom_search_analyzer:
type: custom
tokenizer: standard
filter: [stopwords, asciifolding ,lowercase, snowball, elision, worddelimiter]

В вашем случае, я думаю, вы должны измениться так:

...
'settings' => [
'index' => [
'analysis' => [
'analyzer' => [
'snowball_analyzer' => [
'type' => 'snowball',
'language' => 'English',
'filter' => [ 'lowercase' ]
],
],
],
],
],
...
0

Другие решения

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

{
"query": {
"filtered": {
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "HeLlo*"}
}
]
}
}
}
}
}
0

По вопросам рекламы [email protected]