Пытаясь создать функцию автозаполнения, я думаю, что она работает, но я замечаю, что мой собственный анализатор иногда выдает странные результаты.
var response = this.client.CreateIndex(
ElasticConfig.IndexName,
index => index
.Mappings(
ms => ms.Map<EmployeeDocument>(
m => m.Properties(
p => p
.Text(t => t.Name(n => n.EmpFirstName).Analyzer("auto-complete").Fields(ff => ff.Keyword(k => k.Name("keyword"))))
.Text(t => t.Name(n => n.pkEmpID).Analyzer("auto-complete").Fields(ff => ff.Keyword(k => k.Name("keyword"))))
.Text(t => t.Name(n => n.Description).Analyzer("auto-complete").Fields(ff => ff.Keyword(k => k.Name("keyword")))))))
.Settings(
f => f.Analysis(
analysis => analysis
.Tokenizers(
tokenizers =>
tokenizers
.EdgeNGram("ngram", t => t.MinGram(3).MaxGram(5)))
.Analyzers(
analyzers => analyzers.Custom(
"auto-complete",
a => a.Filters(new List<string> { "lowercase", "ngram" }).Tokenizer("standard"))))));
если я позвоню
127.0.0.1:9200/default-index/_analyze?text=dan&analyzer=auto-complete
тогда я получаю
{
"tokens": [
{
"token": "d",
"start_offset": 0,
"end_offset": 3,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "da",
"start_offset": 0,
"end_offset": 3,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "a",
"start_offset": 0,
"end_offset": 3,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "an",
"start_offset": 0,
"end_offset": 3,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "n",
"start_offset": 0,
"end_offset": 3,
"type": "<ALPHANUM>",
"position": 0
}
]
}
Я установил свой MinGram на 3, поэтому вышеизложенное определенно неверно, я пропустил настройку?