NGram令牌生成器中的max_gram和min_gram之间的区别

时间:2019-09-17 06:34:13

标签: c# elasticsearch nest

我目前正在尝试在.NET项目中配置Elasticsearch索引(我是ES的新手)。

我们正在使用NEST 7.3.0

client.Indices.Create(lineItemIndex,
                c => c
                    .Settings(s => s
                    .Analysis(a => a
                        .Analyzers(aa => aa
                            .Custom("mynGram_analyzer",ca => ca
                            .Filters(new List<string> {"lowercase"})
                            .Tokenizer("mynGram")))
                        .TokenFilters(tf => tf
                            .NGram("mynGram", td => td
                                .MaxGram(15).MinGram(4)))))
                    .Map<ElasticSearchLineItem>(m => m
                        .Properties(ps => ps
                            .Text(ss => ss
                            .Name(na => na.LineItemName)
                            .Analyzer("mynGram")))
                        .Properties(ps => ps
                            .Keyword(kw => kw
                                .Name(na => na.LineItemId)))
                        .Properties(ps => ps
                            .Text(ss => ss
                            .Name(na => na.LineItemNumber)
                            .Analyzer("mynGram")))));

我遇到以下错误:

  

类型:legal_argument_exception原因:“ NGram令牌生成器中的max_gram和min_gram之差必须小于或等于:1但为[11]。可以通过更改[index.max_ngram_diff]来设置此限制。索引级别设置。”

我了解问题所在。但是我不知道在哪里设置此max_ngram_diff设置。我正在尝试浏览the documentation

但他们的最小和最大使用3。

我还找到了一个示例,其中他们在JSON中具有设置,该设置可以发送到ES,但我无法在c#代码中复制它。我希望有人能帮助我。

1 个答案:

答案 0 :(得分:3)

您可以通过以下方式更改此设置

var createIndexResponse = await client.Indices.CreateAsync("index_name",
    c => c.Settings(s => s.Setting(UpdatableIndexSettings.MaxNGramDiff, 11)));

希望有帮助。