Добрый день,
Я пытаюсь использовать «нестандартный анализатор» с именем test_fuzzy в нечетком поиске, но он не работает, когда я вставляю параметр «preserve_original» в «true» в фильтре «asciifolding».
Когда я создаю "custom_analyzer", устанавливающий для "preserve_original" значение false, результаты поиска возвращаются правильно.
Я видел в эластичной документации, что нечеткость будет применяться в каждом термине (после анализа). Кто-нибудь знает причину, по которой не удается найти мои документы, даже если есть больше токенов (больше опций), использующих "preserve_original" как true?
Следующее, когда preserve_original активно (test_fuzzy):
{
"tokens": [
{
"token": "produto",
"start_offset": 0,
"end_offset": 7,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "varzacao",
"start_offset": 8,
"end_offset": 16,
"type": "<ALPHANUM>",
"position": 1
},
{
"token": "varzação",
"start_offset": 8,
"end_offset": 16,
"type": "<ALPHANUM>",
"position": 1
}
]
}
Следующее - когда preserve_original отключен (test_fuzzy):
{
"tokens": [
{
"token": "produto",
"start_offset": 0,
"end_offset": 7,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "varzacao",
"start_offset": 8,
"end_offset": 16,
"type": "<ALPHANUM>",
"position": 1
}
]
}
Вот выполненный запрос:
[
'match' => [
'name.fuzzy' => [
'query' => 'produto varzação',
'operator' => 'and',
'boost' => 2,
'zero_terms_query' => 'all',
'fuzziness' => 'auto' ]
]
]
Следуйте карте:
'name' =>
[
'type' => 'text',
'analyzer' => 'standard',
'fields' => [
'norm' => [
'type' => 'keyword',
'normalizer' => 'keyword_text'
],
'stemmed' => [
'type' => 'text',
'analyzer' => 'stemmed'
],
'fuzzy' => [
'type' => 'text',
'analyzer' => 'test_fuzzy'
]
],
],
Следуйте за парсером и фильтруйте:
'test_fuzzy' => [
'tokenizer' => 'standard',
'filter' => [
'lowercase',
'custom_asciifolding',
]
],
'filter' => [
'custom_asciifolding' => [
'type' => 'asciifolding',
'preserve_original' => true
],