将自定义分析器通用地添加到Nest Elastic search 6.2的所有字段中

时间:2019-01-11 09:57:29

标签: c# elasticsearch nest

我有一个具有100多个属性的弹性搜索索引。我想为大多数字段添加自定义分析器。我想避免使用典型的嵌套语法在每个字段中指定分析器。
writing Analyzers

让我知道是否还有其他方法可以将分析仪设置为通用设置。 请让我知道您的想法。预先感谢。

1 个答案:

答案 0 :(得分:0)

在创建索引时,可以通过将名称为text的分析器添加到索引设置中来为索引中的所有"default"字段change the default analyzer

var defaultIndex = "my_index";
var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));

var settings = new ConnectionSettings(pool)
    .DefaultIndex(defaultIndex);

var client = new ElasticClient(settings);

var createIndexResponse = client.CreateIndex(defaultIndex, c => c
    .Settings(s => s
        .Analysis(a => a
            .Analyzers(an => an
                .Standard("default", st => st
                    .StopWords("_english_")
                )
            )
        )
    )
);

它将发送带有以下正文的创建索引请求

{
  "settings": {
    "analysis": {
      "analyzer": {
        "default": {
          "type": "standard",
          "stopwords": [
            "_english_"
          ]
        }
      }
    }
  }
}

如果您希望将其应用于所有创建的索引,则可以使用index template将此约定应用于所有自动创建的索引

var putIndexTemplateResponse = client.PutIndexTemplate("default_analyzer", t => t
    .IndexPatterns("*")
    .Order(0)
    .Settings(s => s
        .Analysis(a => a
            .Analyzers(an => an
                .Standard("default", st => st
                    .StopWords("_english_")
                )
            )
        )
    )
);