Какой анализатор в ES нужно использовать чтобы найти определенные слова по запросы
Какой анализатор нужно использовать, чтобы при запросе "анализ общего белка" я мог найти совпадения в поле со значением "общий белок", сейчас использую shingle и russian_stemmer, но получаю результат только при точном вхождении
Настройки индекса выглядят так
return new CreateIndexDescriptor(_esindexSettings.Name)
.Map<AnalysisDocument>(o => o
.AutoMap()
.Properties(eps => eps
.Text(e => e.Name(r => r.Name).Analyzer("custom_english_to_russian")))
)
.Settings(s => s
.Analysis(z => z.
Analyzers(a => a
.Custom("custom_english_to_russian", w => w
.Tokenizer("whitespace")
.CharFilters("english_to_russian")
.Filters("lowercase", "shingle", "russian_stemmer")
))
.TokenFilters(q => q
.Stemmer("russian_stemmer", s => s.Language("russian"))
.Shingle("shingle", s => s.MinShingleSize(2).MaxShingleSize(3)))
.CharFilters(q => q
.Mapping("english_to_russian", m => m.Mappings(
"a => ф",
"b => и",
"c => с",
"d => в",
"e => у",
"f => а",
"g => п",
"h => р",
"i => ш",
"j => о",
"k => л",
"l => д",
"m => ь",
"n => т",
"o => щ",
"p => з",
"r => к",
"s => ы",
"t => е",
"u => г",
"v => м",
"w => ц",
"x => ч",
"y => н",
"z => я",
"A => Ф",
"B => И",
"C => С",
"D => В",
"E => У",
"F => А",
"G => П",
"H => Р",
"I => Ш",
"J => О",
"K => Л",
"L => Д",
"M => Ь",
"N => Т",
"O => Щ",
"P => З",
"R => К",
"S => Ы",
"T => Е",
"U => Г",
"V => М",
"W => Ц",
"X => Ч",
"Y => Н",
"Z => Я",
"[ => х",
"{ => Х",
"] => ъ",
"; => ж",
", => б",
"< => Б",
"> => Ю"
)))));