elasticsearch,elasticsearch-6,C#,elasticsearch,Elasticsearch 6" /> elasticsearch,elasticsearch-6,C#,elasticsearch,Elasticsearch 6" />

C# Elasticsearch 6.3-如何在分析的字段上排序?

C# Elasticsearch 6.3-如何在分析的字段上排序?,c#,elasticsearch,elasticsearch-6,C#,elasticsearch,Elasticsearch 6,因此,我在较旧版本的Elastic中找到了这样的例子,但由于语法的变化,我无法将这些解决方案转换为6.3语法 我有一个字段ShowName(String),我已经对它应用了N-Gram分析器。问题是,我还需要按该字段进行排序。在我添加分析器之前,我得到了关键字后缀子属性,并且能够进行排序,但是,由于添加了分析器,我现在无法访问该关键字子属性 我已尝试在模型中使用[Text(Analyzer=“nGram\u Analyzer”)]和关键字属性装饰属性,但在创建索引时,我收到一个错误消息: 找到多

因此,我在较旧版本的Elastic中找到了这样的例子,但由于语法的变化,我无法将这些解决方案转换为6.3语法

我有一个字段ShowName(String),我已经对它应用了N-Gram分析器。问题是,我还需要按该字段进行排序。在我添加分析器之前,我得到了关键字后缀子属性,并且能够进行排序,但是,由于添加了分析器,我现在无法访问该关键字子属性

我已尝试在模型中使用
[Text(Analyzer=“nGram\u Analyzer”)]
关键字
属性装饰属性,但在创建索引时,我收到一个错误消息:

找到多个相同类型的自定义属性

然后,在创建索引(下面的代码)时,我尝试在映射中显式添加这两个字段,虽然这会创建这两个字段,但我仍然无法按关键字后缀字段排序。有人能指出我哪里出了问题吗

var createIndexResponse = client.CreateIndex(shows, c => c
            .Settings(s => s
                .Analysis(a => a
                    .TokenFilters(t => t.NGram("nGram_filter", ng => ng.MinGram(3).MaxGram(10)))
                    .Analyzers(aa => aa
                        .Custom("nGram_analyzer", cc => cc
                            .Tokenizer("whitespace")
                            .Filters(nGramFilters1)
                        )
                    )
                )
            )
            .Mappings(ms => ms
                .Map<ShowElasticSearchModel>(m => m
                    .AutoMap<ShowElasticSearchModel>()
                    .Properties(p => p
                        .Text(t => t
                            .Name(n => n.ShowName)
                            .Analyzer("nGram_analyzer")
                            .Fields(fs => fs
                                .Text(tt => tt.Name(nn => nn.ShowName.Suffix("keyword")))
                            )
                        )
                    )
                )
            )
        );
var createIndexResponse=client.CreateIndex(显示,c=>c
.Settings(s=>s
.分析(a=>a
.TokenFilters(t=>t.NGram(“NGram_filter”,ng=>ng.MinGram(3).MaxGram(10)))
.分析仪(aa=>aa
.Custom(“nGram_分析器”,cc=>cc
.Tokenizer(“空白”)
.过滤器(NGRAMPilters1)
)
)
)
)
.Mappings(ms=>ms
.Map(m=>m
.AutoMap()
.Properties(p=>p
.Text(t=>t
.Name(n=>n.ShowName)
.分析仪(“nGram_分析仪”)
.Fields(fs=>fs
.Text(tt=>tt.Name(nn=>nn.ShowName.Suffix(“关键字”))
)
)
)
)
)
);
编辑:根据收到的答案,代码块的最终语法如下(现在代码中包含多个多字段)

var createIndexResponse=client.CreateIndex(显示,c=>c
.Settings(s=>s
.分析(a=>a
.TokenFilters(t=>t.NGram(“NGram_filter”,ng=>ng.MinGram(3).MaxGram(10)))
.分析仪(aa=>aa
.Custom(“nGram_分析器”,cc=>cc
.Tokenizer(“空白”)
.过滤器(NGRAMPilters1)
)
)
)
)
.Mappings(ms=>ms
.Map(m=>m
.AutoMap()
.Properties(p=>p
.Text(t=>t
.Name(n=>n.ShowName)
.分析仪(“nGram_分析仪”)
.Fields(ff=>ff
.Keyword(k=>k
.Name(n=>n.ShowName.Suffix(“关键字”))
)
)
)
.Text(t=>t
.名称(n=>n.组织)
.分析仪(“nGram_分析仪”)
.Fields(ff=>ff
.Keyword(k=>k
.Name(n=>n.organization.Suffix(“关键字”))
)
)
)
.Text(t=>t
.名称(n=>n.场馆)
.分析仪(“nGram_分析仪”)
.Fields(ff=>ff
.Keyword(k=>k
.Name(n=>n.victions.Suffix(“关键字”))
)
)
)
)
)
)
);

字符串
自Elasticsearch 5.0以来,字段类型一直为和类型<代码>文本字段不能用于排序,因此您需要创建:使用type
文本
进行全文搜索,使用type
关键字
进行聚合和排序


但在您的示例中,您创建了两个
文本
字段,并使用
关键字
作为字段名后缀,而不是字段类型(就我所能理解的
c35;
语法而言)。

这就是我需要的解释!要弄清楚确切的语法需要一点时间,但谢谢你的指点。确切的语法现在是个问题。不客气!不幸的是,我不太懂
C
,所以我很难提供准确的代码片段。我已经在原始问题中添加了我使用的代码片段。你的建议足以为我指明正确的方向:)
var createIndexResponse = client.CreateIndex(shows, c => c
            .Settings(s => s
                .Analysis(a => a
                    .TokenFilters(t => t.NGram("nGram_filter", ng => ng.MinGram(3).MaxGram(10)))
                    .Analyzers(aa => aa
                        .Custom("nGram_analyzer", cc => cc
                            .Tokenizer("whitespace")
                            .Filters(nGramFilters1)
                        )
                    )
                )
            )
            .Mappings(ms => ms
                .Map<ShowElasticSearchModel>(m => m
                    .AutoMap<ShowElasticSearchModel>()
                    .Properties(p => p
                        .Text(t => t
                            .Name(n => n.ShowName)
                            .Analyzer("nGram_analyzer")
                            .Fields(ff => ff
                                .Keyword(k => k
                                    .Name(n => n.ShowName.Suffix("keyword"))
                                )
                            )
                        )
                        .Text(t => t
                            .Name(n => n.Organisation)
                            .Analyzer("nGram_analyzer")
                            .Fields(ff => ff
                                .Keyword(k => k
                                    .Name(n => n.Organisation.Suffix("keyword"))
                                )
                            )
                        )
                        .Text(t => t
                            .Name(n => n.Venues)
                            .Analyzer("nGram_analyzer")
                            .Fields(ff => ff
                                .Keyword(k => k
                                    .Name(n => n.Venues.Suffix("keyword"))
                                )
                            )
                        )
                    )
                )
            )
        );