Я использую ES7.5 и пытаюсь настроить подсветку для поиска в ngram (результаты поиска работают так, как ожидалось).
В настоящее время у меня есть куча документов с полем имени, и когда я делаю частичный поиск с помощью ngrams, он выделяет все слово, а не подстроку, которую вводит пользователь.
Например, скажем, у меня есть имена: Джо Фу, Джон Бар
Если я задам вопрос «Джо», я получаю следующее:
{
"_source": {
"name": "Joe Foo"
},
"highlight": {
"name.ngram": [
"<em>Joe</em>Foo"
]
}
}, {
"_source": {
"name": "John Bar"
},
"highlight": {
"name.ngram": [
"<em>John</em>Bar"
]
}
}
Что я на самом деле want:
{
"_source": {
"name": "Joe Foo"
},
"highlight": {
"name.ngram": [
"<em>Jo</em>e Foo"
]
}
}, {
"_source": {
"name": "John Bar"
},
"highlight": {
"name.ngram": [
"<em>Jo</em>hn Bar"
]
}
}
Вот мое отображение:
"settings": {
"max_ngram_diff": 50,
"analysis": {
"filter": {
"autocomplete_filter": {
"type": "ngram",
"min_gram": 1,
"max_gram": 50
}
},
"analyzer": {
"autocomplete_analyzer": {
"type": "custom",
"tokenizer": "whitespace",
"filter": ["lowercase", "autocomplete_filter"]
},
"lowercase_analyzer": {
"type": "custom",
"tokenizer": "whitespace",
"filter": ["lowercase"]
}
}
}
},
"mappings": {
"properties": {
"name": {
"type": "keyword",
"fields": {
"autocomplete": {
"type": "text",
"analyzer": "autocomplete_analyzer",
"search_analyzer": "lowercase_analyzer"
}
}
}
}
}
И выполняемый мной запрос:
{
"query": {
"bool": {
"should": [
{ "match": {
"name.autocomplete": {
"query": "jo"
}
} }
]
}
},
"highlight": {
"fields": {
"name.autocomplete": {}
}
}
}
Возможно ли это сделать? спасибо за любую помощь.