Индекс и сортировка в elasticsearch
есть задача сортировать по текстовому полю в алфавитном(и обратно) порядке. текстовое поле может содержать вначале пробел или кавычки, что ломает сортировку. Каким образом можно игнорировать специальные символы, либо при создании индекса либо при сортировке ?
в инете находил что надо писать свои анализаторы, но как это сделать в c# толкового не нашел ничего. В эластике я полный ноль, а время поджимает(
создание индекса:
await _elasticClient.Indices.CreateAsync(_options.Value.Index[nameof(TestDto)], c => c
.Map<TestDto>(m => m.AutoMap().Properties(p => p.Text(t => t.Name(n => n.ShortName)
.Fields(f => f.Keyword(k => k.Name("keyword").IgnoreAbove(256))
.Keyword(k => k
.Name("keyword_lowercase")
.Normalizer("lowercase")
.IgnoreAbove(256))))))
);
Буду очень признателен помощи, спасибо!
Ответы (1 шт):
Автор решения: Mardul
→ Ссылка
в общем вроде как сам разобрался, возможно кому-то будет полезно.
await _elasticClient.Indices.CreateAsync(_options.Value.Index[nameof(TestDto)], c => c
.Settings(s => s
.Analysis(a => a
.CharFilters(cf => cf.PatternReplace("char_ignore", pr => pr.Pattern(@"\s|""").Replacement("")))
.Normalizers(n => n
.Custom("special_char_ignore", cn => cn
.Filters("lowercase")
.CharFilters("char_ignore")))))
.Map<TestDto>(m => m.AutoMap().Properties(p => p.Text(t => t.Name(n => n.ShortName)
.Fields(f => f.Keyword(k => k.Name("keyword").IgnoreAbove(256))
.Keyword(k => k
.Name("keyword_lowercase")
.Normalizer("special_char_ignore")
.IgnoreAbove(256))))))
);