Elastic Search FVH выделяет наименьший соответствующий токен
Настройки:
{
"settings": {
"analysis": {
"analyzer": {
"idx_analyzer_ngram": {
"type": "custom",
"filter": [
"lowercase",
"asciifolding",
"edgengram_filter_1_32"
],
"tokenizer": "ngram_alltokenchar_tokenizer_1_32"
},
"ngrm_srch_analyzer": {
"filter": [
"lowercase"
],
"type": "custom",
"tokenizer": "keyword"
}
},
"tokenizer": {
"ngram_alltokenchar_tokenizer_1_32": {
"token_chars": [
"letter",
"whitespace",
"punctuation",
"symbol",
"digit"
],
"min_gram": "1",
"type": "nGram",
"max_gram": "32"
}
}
}
}
}
Отображения:
{
"properties": {
"TITLE": {
"type": "string",
"fields": {
"untouched": {
"index": "not_analyzed",
"type": "string"
},
"ngramanalyzed": {
"search_analyzer": "ngrm_srch_analyzer",
"index_analyzer": "idx_analyzer_ngram",
"type": "string",
"term_vector": "with_positions_offsets"
}
}
}
}
}
Запрос:
{
"query": {
"filtered": {
"query": {
"query_string": {
"query": "have some ha",
"fields": [
"TITLE.ngramanalyzed"
],
"default_operator": "and"
}
}
}
},
"highlight": {
"fields": {
"TITLE.ngramanalyzed": {}
}
}
}
У меня есть документ, проиндексированный с названием TITLE, есть какая-то счастливая еда. Когда я ищу что-то, я могу получить правильные результаты.
<em>have</em> <em>some</em> happy meal
По мере того, как я набираю больше, у меня есть несколько гектаров, результаты выделения не соответствуют ожидаемым.
<em>ha</em>ve <em>some</em> <em>ha</em>ppy meal
Имеющее слово частично выделяется как ха.
Я ожидал бы, что он выделит самый длинный совпадающий токен, потому что с ngrams с минимальным размером = 1 это дает мне подсветку 1 или более символов, в то время как должен быть другой совпадающий токен из 4 или 5 символов (например , должен иметь также быть выделенным вместе с выделением.
Я не могу найти решение для того же. Пожалуйста, предложите.