Подсветка Elasticsearch для каждого персонажа с нечетким поиском и edge_ngram - PullRequest
0 голосов
/ 18 марта 2019

Я пытаюсь объединить нечеткий поиск с подсветкой и edge_ngram, чтобы получить функциональность поиска по типу.У меня все работает, хотя у меня есть одна проблема: основные моменты, которые я получаю, имеют дополнительные 2-3 символа вместо каждого символа, хотя я указал min_gram из 1. В некоторых случаях это будетхотя сделайте это правильно.

Тесты :

+--------+---------------------------------------+---------------------------------------+
| Input  | Expected output                       | Actual output                         |
+--------+---------------------------------------+---------------------------------------+
| engin  | <em>Engin</em>eer                     | <em>Engine</em>er                     |
+--------+---------------------------------------+---------------------------------------+
| tell   | <em>Tell</em>er                       | <em>Telle</em>r                       |
+--------+---------------------------------------+---------------------------------------+
| engibe | <em>Engine</em>er                     | <em>Enginee</em>r                     |
+--------+---------------------------------------+---------------------------------------+
| pakk   | <em>Pack</em>er and <em>Pack</em>ager | <em>Pack</em>er and <em>Pack</em>ager |
+--------+---------------------------------------+---------------------------------------+

Мой запрос выглядит так:

{
   "query":{
      "bool":{
         "should":[
            {
               "match":{
                  "title.autocomplete":{
                     "query":"engin"
                  }
               }
            },
            {
               "match":{
                  "title.autocomplete":{
                     "query":"engin",
                     "fuzziness":"AUTO"
                  }
               }
            }
         ]
      }
   }
}

Когда я использую только match предложение без нечеткости Я получу правильную подсветку.

Моя конфигурация подсветки:

{
   "highlight":{
         "fields":{
            "title.autocomplete":{
               "pre_tags":"<em>",
               "post_tags":"<em>",
               "fragmenter":"simple",
               "type":"plain"
            }
        }
    }
}

Моя конфигурация edge_ngram:

"settings": {
    "analysis": {
        "analyzer": {
            "custom_analyzer": {
                "type": "custom",
                "filter": {
                    "lowercase"
                },
                "tokenizer": "whitespace"
            },
            "autocomplete": {
                "tokenizer": "autocomplete",
                "filter": {
                    "lowercase"
                }
            },
            "autocomplete_search": {
                "tokenizer": "lowercase"
            }
        },
        "tokenizer": {
            "autocomplete": {
                "type": "edge_ngram",
                "min_gram": 1,
                "max_gram": 50,
                "token_chars": {
                    "letter", "digit"
                }
            }
        }
    }
}
...