elasticsearch - 创建索引 Nest

标签 elasticsearch indexing nest elasticsearch-mapping elasticsearch-analyzers

如何使用 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<Object>(mapping => mapping
                .IndexAnalyzer("trigram")
                .Type("string"))
 );

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

更新:

找到 this使用的帖子 var index = new IndexSettings()

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

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

在哪里可以找到更多像这样的例子,这行得通吗?

最佳答案

在旧版本中创建索引

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<Object>(mapping => mapping
              .Type("data")
              .AllField(af => af.Enabled())
              .Properties(prop => prop
                 .String(sprop => sprop
                   .Name("text")
                   .IndexAnalyzer("trigrams")
                  )
               )
           )
       );

请注意,NEST 还包括使用强类型类创建索引设置的能力。如果我有时间研究它,我稍后会发布一个示例。

使用 NEST 7.x 创建索引

另请注意,在 NEST 7.x 中,CreateIndex 方法已被删除。使用 Indices.Create 是不合适的。这是示例。

_client.Indices
    .Create(indexName, s => s
        .Settings(se => se
            .NumberOfReplicas(replicas)
            .NumberOfShards(shards)
            .Setting("merge.policy.merge_factor", "10")));

关于elasticsearch - 创建索引 Nest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23220874/

相关文章:

elasticsearch - 我没有回应

c# - 在 elasticsearch NEST 客户端中使用地理点索引未映射/动态映射的文档

elasticsearch - 如何使用 Liferay API 在 Elastic-search 中构建父子关系搜索?

Elasticsearch:聚合数组中的不同值

python - 在 numpy 中向量化这个 for 循环

indexing - Neo4j:在所有标签上创建索引

postgresql - postgres 流式复制 - 仅从属索引

sql-server - 将批量数据索引到 ElasticSearch 的首选方法?

php - 如何使用ElasticSearch索引搜索单词的一部分

c# - Elasticsearch Nest 带空格的通配符查询