Итак, я нашел примеры этого для более старых версий Elastic, но из-за изменения синтаксиса мне не удалось перевести эти решения в синтаксис 6.3.
У меня есть поле,ShowName (String), к которому я применил N-Gram Analyzer.Проблема в том, что мне также нужно отсортировать по этому полю.До того, как я добавил анализатор, я получил вспомогательное свойство суффикса ключевого слова и не мог сортировать, но после добавления анализатора у меня нет доступа к этому вспомогательному свойству ключевого слова.
Я пыталсядекорирование свойства в моей модели свойствами [Text(Analyzer = "nGram_analyzer")])
и Keyword
, но при создании индекса появляется сообщение об ошибке:
Найдено несколько пользовательских атрибутов одного типа.
Затем я попытался явно добавить оба поля в сопоставления при создании моего индекса (код ниже), и хотя это создает оба поля, я все еще не могу отсортировать по полю с суффиксом ключевого слова.Кто-нибудь может указать, где я ошибаюсь?
var createIndexResponse = client.CreateIndex(shows, c => c
.Settings(s => s
.Analysis(a => a
.TokenFilters(t => t.NGram("nGram_filter", ng => ng.MinGram(3).MaxGram(10)))
.Analyzers(aa => aa
.Custom("nGram_analyzer", cc => cc
.Tokenizer("whitespace")
.Filters(nGramFilters1)
)
)
)
)
.Mappings(ms => ms
.Map<ShowElasticSearchModel>(m => m
.AutoMap<ShowElasticSearchModel>()
.Properties(p => p
.Text(t => t
.Name(n => n.ShowName)
.Analyzer("nGram_analyzer")
.Fields(fs => fs
.Text(tt => tt.Name(nn => nn.ShowName.Suffix("keyword")))
)
)
)
)
)
);
Редактировать: Исходя из полученного ответа, окончательный синтаксис для кодового блока выглядит следующим образом (теперь содержит несколько мультиполей в коде).
var createIndexResponse = client.CreateIndex(shows, c => c
.Settings(s => s
.Analysis(a => a
.TokenFilters(t => t.NGram("nGram_filter", ng => ng.MinGram(3).MaxGram(10)))
.Analyzers(aa => aa
.Custom("nGram_analyzer", cc => cc
.Tokenizer("whitespace")
.Filters(nGramFilters1)
)
)
)
)
.Mappings(ms => ms
.Map<ShowElasticSearchModel>(m => m
.AutoMap<ShowElasticSearchModel>()
.Properties(p => p
.Text(t => t
.Name(n => n.ShowName)
.Analyzer("nGram_analyzer")
.Fields(ff => ff
.Keyword(k => k
.Name(n => n.ShowName.Suffix("keyword"))
)
)
)
.Text(t => t
.Name(n => n.Organisation)
.Analyzer("nGram_analyzer")
.Fields(ff => ff
.Keyword(k => k
.Name(n => n.Organisation.Suffix("keyword"))
)
)
)
.Text(t => t
.Name(n => n.Venues)
.Analyzer("nGram_analyzer")
.Fields(ff => ff
.Keyword(k => k
.Name(n => n.Venues.Suffix("keyword"))
)
)
)
)
)
)
);