如何通过NEST客户端流利的语法为弹性搜索索引定义多个分析器



我在使用NEST v7.6.0 定义多个分析器(以及令牌过滤器(时遇到问题

例如,使用此配置

_client.Indices.Create(Settings.GetElasticIndex(), c => c
.Settings(s => s
.Analysis(a => a
.Analyzers(aa => aa.Standard("standard_english", sa => sa.StopWords("_english_")))
.Analyzers(aa => aa.Custom("randomcustom", sa => sa.Tokenizer("standard"))))
)
.Map<POCO>(mm => 
mm.AutoMap()
.Properties(p => p
.Text(t => t.Name(n => n.Field1).Analyzer("standard_english"))
.Text(t => t.Name(n => n.Field2).Analyzer("randomcustom"))
)
)
);

我在创建索引时收到以下错误:

远程服务器返回错误:(400(错误请求。。调用:来自PUT/xxx的状态代码400。服务器错误:类型:mapper_parsing_exception原因:"解析映射[_doc]失败:找不到字段[xxx]的分析器[standard_english]"原因:;类型:mapper_parsing_exception原因:"没有为字段[xxx]找到分析器[standard_english]";

如果我切换定义,我可以引用standard_english分析器,但不能引用randomcustom分析器,所以last-in获胜。如何使用流利的语法定义多个分析器?

您需要这样做:

_client.Indices.Create(Settings.GetElasticIndex(), c => c
.Settings(s => s
.Analysis(a => a
.Analyzers(aa => aa
.Standard("standard_english", sa => sa.StopWords("_english_"))
.Custom("randomcustom", sa => sa.Tokenizer("standard"))
)
)
.Map<POCO>(mm => 
mm.AutoMap()
.Properties(p => p
.Text(t => t.Name(n => n.Field1).Analyzer("standard_english"))
.Text(t => t.Name(n => n.Field2).Analyzer("randomcustom"))
)
)
);