Ваша проблема здесь связана со стеммерами.Я проанализировал ваш attr_analyzer
анализатор.Пожалуйста, посмотрите ниже.
Первый тест:
GET index-52983383/_analyze
{
"analyzer": "attr_analyzer",
"text": "Activa Rooftop, valves, VG3000, VG3000FS, butterfly, ball"
}
Ответ:
{
"tokens": [
{
"token": "activ",
"start_offset": 0,
"end_offset": 6,
"type": "word",
"position": 0
},
{
"token": "rooftop",
"start_offset": 7,
"end_offset": 14,
"type": "word",
"position": 1
},
{
"token": "valv",
"start_offset": 16,
"end_offset": 22,
"type": "word",
"position": 2
},
{
"token": "vg",
"start_offset": 24,
"end_offset": 26,
"type": "word",
"position": 3
},
{
"token": "vg",
"start_offset": 32,
"end_offset": 34,
"type": "word",
"position": 4
},
{
"token": "fs",
"start_offset": 38,
"end_offset": 40,
"type": "word",
"position": 5
},
{
"token": "butterfly",
"start_offset": 42,
"end_offset": 51,
"type": "word",
"position": 6
},
{
"token": "ball",
"start_offset": 53,
"end_offset": 57,
"type": "word",
"position": 7
}
]
}
Второй тест:
GET index-52983383/_analyze
{
"analyzer": "attr_analyzer",
"text": "Activa Rooftop, valves"
}
Ответ:
{
"tokens": [
{
"token": "activ",
"start_offset": 0,
"end_offset": 6,
"type": "word",
"position": 0
},
{
"token": "rooftop",
"start_offset": 7,
"end_offset": 14,
"type": "word",
"position": 1
},
{
"token": "valv",
"start_offset": 16,
"end_offset": 22,
"type": "word",
"position": 2
}
]
}
Как видите, в обоих ответах у вас есть valv
токенов.Расстояние Левенштейна между valv
и ball
, которое у вас есть в поисковом запросе, равно 2, что в точности равно вашему fuzziness
параметру.
Когда вы используете fuzziness
, вам часто приходится как-то идти на компромисс,В другом случае вы будете получать аналогичные ситуации.Может быть, рассмотрим использование значения AUTO
вместо 2 в качестве fuzziness
?Пожалуйста, посмотрите документацию , если вы не понимаете, о чем я говорю.Другим вариантом может быть установка prefix_length
как минимум на 1, поэтому первый символ всегда должен совпадать.Вам нужно провести те же тесты и решить, что будет для вас наилучшим.