Нечеткий в поисках с Asciifolding - PullRequest
0 голосов
/ 06 ноября 2018

Добрый день, Я пытаюсь использовать «нестандартный анализатор» с именем 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
        ],
...