如何通过 NEST 客户端流畅语法为弹性搜索索引定义多个分析器
How to define multiple analyzers for an elasticsearch index via NEST client fluent syntax
我在使用 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) 错误请求。调用:状态代码 400 来自:PUT /xxx。 ServerError:类型:mapper_parsing_exception 原因:“无法解析映射 [_doc]:未找到字段 [xxx] 的分析器 [standard_english]” CausedBy:“类型:mapper_parsing_exception 原因:”分析器[standard_english] 未找到字段 [xxx]
如果我切换定义,我可以引用 standard_english 分析器但不能引用 randomcustom 分析器,所以最后获胜。如何使用流畅的语法定义多个分析器?
你需要这样做:
_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"))
)
)
);
我在使用 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) 错误请求。调用:状态代码 400 来自:PUT /xxx。 ServerError:类型:mapper_parsing_exception 原因:“无法解析映射 [_doc]:未找到字段 [xxx] 的分析器 [standard_english]” CausedBy:“类型:mapper_parsing_exception 原因:”分析器[standard_english] 未找到字段 [xxx]
如果我切换定义,我可以引用 standard_english 分析器但不能引用 randomcustom 分析器,所以最后获胜。如何使用流畅的语法定义多个分析器?
你需要这样做:
_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"))
)
)
);