如何通过 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"))
            )
        )
    );