当前位置:  开发笔记 > 前端 > 正文

创建索引Nest

如何解决《创建索引Nest》经验,为你挑选了2个好方法。

如何使用Elasticsearch Nest API重新创建以下索引?

这是索引的json,包括映射:

{
    "settings": {
        "analysis": {
            "filter": {
                "trigrams_filter": {
                    "type":     "ngram",
                    "min_gram": 3,
                    "max_gram": 3
                }
            },
            "analyzer": {
                "trigrams": {
                    "type":      "custom",
                    "tokenizer": "standard",
                    "filter":   [
                        "lowercase",
                        "trigrams_filter"
                    ]
                }
            }
        }
    },
    "mappings": {
        "data": {
        "_all" : {"enabled" : true},
            "properties": {
                "text": {
                    "type":     "string",
                    "analyzer": "trigrams" 
                }
            }
        }
    }
}

这是我的尝试:

var newIndex = client.CreateIndexAsync(indexName, index => index
            .NumberOfReplicas(replicas)
            .NumberOfShards(shards)
            .Settings(settings => settings
                .Add("merge.policy.merge_factor", "10")
                .Add("search.slowlog.threshold.fetch.warn", "1s")
                .Add("mapping.allow_type_wrapper", true))
             .AddMapping(mapping => mapping
                .IndexAnalyzer("trigram")
                .Type("string"))
 );


文档中没有提到任何相关内容?

更新:

发现这篇文章使用 var index = new IndexSettings()

然后使用字符串文字json添加Analysis.

index.Add("analysis", @"{json});

哪里可以找到更多像这样的例子,这有用吗?



1> Paige Cook..:

有两种主要方法可以实现这一点,如Nest Create Index Documentation中所述:

以下是将索引设置直接声明为Fluent Dictionary条目的方法.就像你在上面的例子中所做的那样.我在本地测试了它,它产生的索引设置与上面的JSON相匹配.

    var response = client.CreateIndex(indexName, s => s
      .NumberOfReplicas(replicas)
      .NumberOfShards(shards)
      .Settings(settings => settings
         .Add("merge.policy.merge_factor", "10")
         .Add("search.slowlog.threshold.fetch.warn", "1s")
         .Add("mapping.allow_type_wrapper", true)
         .Add("analysis.filter.trigrams_filter.type", "nGram")
         .Add("analysis.filter.trigrams_filter.min_gram", "3")
         .Add("analysis.filter.trigrams_filter.max_gram", "3")
         .Add("analysis.analyzer.trigrams.type", "custom")
         .Add("analysis.analyzer.trigrams.tokenizer", "standard")
         .Add("analysis.analyzer.trigrams.filter.0", "lowercase")
         .Add("analysis.analyzer.trigrams.filter.1", "trigrams_filter")
       )
       .AddMapping(mapping => mapping
          .Type("data")
          .AllField(af => af.Enabled())
          .Properties(prop => prop
             .String(sprop => sprop
               .Name("text")
               .IndexAnalyzer("trigrams")
              )
           )
       )
   );


请注意,NEST还包括使用强类型类创建索引设置的功能.如果我有时间完成它,我稍后会发布一个例子.

希望这可以帮助.



2> Dale Bingham..:

如果人们有NEST 2.0,则.NumberOfReplicas(x).NumberOfShards(y)现在位于"设置"区域中,因此在"设置"下的lamba表达式中指定.

        EsClient.CreateIndex("indexname", c => c
        .Settings(s => s
             .NumberOfReplicas(replicasNr)
             .NumberOfShards(shardsNr)
        )

NEST 2.0有很多变化,并且稍微改变了一些东西,所以这些答案肯定是一个很好的起点.您可能需要针对NEST 2.0更新进行一些调整.

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有