使用 NEST 创建自定义令牌过滤器
Posted
技术标签:
【中文标题】使用 NEST 创建自定义令牌过滤器【英文标题】:Create custom token filter with NEST 【发布时间】:2013-11-19 15:13:30 【问题描述】:如何使用带有此类 JSON 的 NEST 配置索引:
"settings":
"analysis":
"filter":
"name_ngrams":
"side":"front",
"max_gram":50,
"min_gram":2,
"type":"edgeNGram"
,
"analyzer":
"partial_name":
"filter":[
"standard",
"lowercase",
"asciifolding",
"name_ngrams"
],
"type":"custom",
"tokenizer":"standard"
我可以使用CustomAnalyzer
类创建我的自定义分析器,但我找不到如何创建自定义过滤器并将其注册到我的分析器中。
提前致谢!
【问题讨论】:
【参考方案1】:经过一番搜索,我找到了解决方案:
var partialName = new CustomAnalyzer
Filter = new List<string> "lowercase", "name_ngrams", "standard", "asciifolding",
Tokenizer = "standard"
;
var fullName = new CustomAnalyzer
Filter = new List<string> "standard", "lowercase", "asciifolding",
Tokenizer = "standard"
;
client.CreateIndex("indexname", c => c
.Analysis(descriptor => descriptor
.TokenFilters(bases => bases.Add("name_ngrams", new EdgeNGramTokenFilter
MaxGram = 20,
MinGram = 2,
Side = "front"
))
.Analyzers(bases => bases
.Add("partial_name", partialName)
.Add("full_name", fullName))
)
.AddMapping<Company>(m => m
.Properties(o => o
.String(i => i
.Name(x => x.Name)
.IndexAnalyzer("partial_name")
.SearchAnalyzer("full_name")
))));
【讨论】:
索引分析器和搜索分析器有什么区别?为什么需要单独申请? 我使用这篇文章来了解它是如何工作的 - web.archive.org/web/20121021233420/http://…。它不再可以从原始网址获得,但希望它可以从 web.archive.org 访问 对于使用 NEST v5.3 查看此解决方案的任何人......您需要 bases.UserDefined 而不是 bases.Add以上是关于使用 NEST 创建自定义令牌过滤器的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 elasticsearch nest api 创建自定义分析器以忽略重音和 pt-br 停用词?