elasticsearch 使用自定义ElasticSearch分析器
我有一个关于弹性搜索分析器的问题。 我创建了一个自定义分析器,如下所示:elasticsearch 使用自定义ElasticSearch分析器,elasticsearch,nest,elasticsearch,Nest,我有一个关于弹性搜索分析器的问题。 我创建了一个自定义分析器,如下所示: Analyzers(o => o.Custom("custom", m => m.CharFilters("icu_normalizer").Filters("lowercase", "asciifolding").Tokenizer("icu_tokenizer") _search?q=sodertorg&analyzer=custom 并尝试分析
Analyzers(o => o.Custom("custom",
m => m.CharFilters("icu_normalizer").Filters("lowercase", "asciifolding").Tokenizer("icu_tokenizer")
_search?q=sodertorg&analyzer=custom
并尝试分析仪,结果显示以下标记(良好):
我没有得到任何结果(糟糕)
我错过什么了吗?
谢谢。在执行
查询字符串时,您将以\u all
字段为目标。查询字符串中指定的分析器
仅适用于如何分析查询;对内容进行索引时,\u all
字段仍将使用标准
分析器
要修复此问题,您需要确保自定义的分析器
已应用于映射中的\u all
字段,例如
var createIndexResponse = client.CreateIndex("my-index", c => c
.Settings(s => s
.Analysis(a => a
.Analyzers(o => o
.Custom("custom", m => m
.CharFilters("icu_normalizer")
.Filters("lowercase", "asciifolding")
.Tokenizer("icu_tokenizer")
)
)
)
)
.Mappings(m => m
.Map<Project>(mm => mm
// apply to _all field
.AllField(s => s
.Analyzer("custom")
)
.AutoMap()
)
)
);
var createIndexResponse=client.CreateIndex(“我的索引”,c=>c
.Settings(s=>s
.分析(a=>a
.分析仪(o=>o
.Custom(“Custom”,m=>m
.CharFilters(“icu正常化器”)
.过滤器(“小写”、“ascifolding”)
.Tokenizer(“icu_Tokenizer”)
)
)
)
)
.Mappings(m=>m
.Map(mm=>mm
//适用于所有字段
.AllField(s=>s
.Analyzer(“自定义”)
)
.AutoMap()
)
)
);
在映射中以这种方式应用分析器时,您应该会得到预期的结果;您不再需要在查询中指定分析器,因为映射中的分析器将用于索引时间和查询时间分析。如果使用存储数据的确切字段,即\u search?q=field:sodertorg&analyzer=custom
,会发生什么情况。当我搜索“södertorg”(或“U search?q=name1:södertorg”)时,标准分析器将立即找到结果,但我的自定义分析器不工作,尽管它可用于其他搜索(例如,电子邮件字段中的“jarn”),自定义分析器存储在哪里?
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 0,
"max_score": null,
"hits": []
}
}
var createIndexResponse = client.CreateIndex("my-index", c => c
.Settings(s => s
.Analysis(a => a
.Analyzers(o => o
.Custom("custom", m => m
.CharFilters("icu_normalizer")
.Filters("lowercase", "asciifolding")
.Tokenizer("icu_tokenizer")
)
)
)
)
.Mappings(m => m
.Map<Project>(mm => mm
// apply to _all field
.AllField(s => s
.Analyzer("custom")
)
.AutoMap()
)
)
);