Всем привет!
Подскажите, как настроить поиск для побуквенной подсветки и поиска слов в не зависимости от их расположения в тексте.
Например текст: "Купить яблоки в магазине ХХХ"
Нужно найти по словам: "Купить яблоки", "Купить в магазине", "Яблоки ХХХ", "ХХХ яблоки", "ХХХ купить яблоки", "Купить ХХХ"
Настройки индекса на данный момент.
Настройки анализатора
"char_filter" : {
"char_mapping" : {
"type" : "mapping",
"mappings" : [
"Ё => Е",
"ё => е"
]
},
},
"analyzer" : {
"ngram" : {
"filter" : [
"lowercase"
],
"char_filter" : [
"html_strip",
"char_mapping"
],
"type" : "custom",
"tokenizer" : "ngram"
},
},
"tokenizer" : {
"ngram" : {
"token_chars" : [
"letter",
"digit",
"symbol",
],
"min_gram" : "2",
"type" : "edge_ngram",
"max_gram" : "20"
},
}
Подсветка работает как надо, но ищет только в прямой последовательности.
После эксперементов, получил
Настройки анализатора
"filter" : {
"ngram" : {
"token_chars" : [
"letter",
"digit",
"symbol",
],
"min_gram" : "2",
"type" : "edge_ngram",
"max_gram" : "20"
},
},
"char_filter" : {
"char_mapping" : {
"type" : "mapping",
"mappings" : [
"Ё => Е",
"ё => е"
]
},
},
"analyzer" : {
"ngram" : {
"filter" : [
"lowercase",
"ngram_filter"
],
"char_filter" : [
"html_strip",
"char_mapping"
],
"tokenizer" : "whitespace"
},
}
Теперь ищет как надо, но подсвечивает слова, а не то что ввели.
Хочется получить гибрид этих двух настроек.
Версия эластика 6.3.1, поиск осуществляется с помощью запроса
Запрос
{
"query": {
"bool": {
"must": [
{
"match": {
"title.ngram": {
"query": "Купить яб"
}
}
}
]
}
},
"highlight": {
"fields": {
"*" : {}
}
}
}