我在使用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"))
)
)
);