Я пытаюсь объединить нечеткий поиск с подсветкой и 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"
}
}
}
}
}