在索引上创建令牌过滤器时,使用Elasticsearch Nest库会引发错误

问题描述 投票:0回答:1

我需要使用Nest库在Elasticsearch中创建一个同义词令牌过滤器,但它不断抛出错误。

     SynonymTokenFilter synonymFilter = new SynonymTokenFilter {
                    Format = SynonymFormat.Solr,
                    SynonymsPath= "synonym.txt",
                    Tokenizer="whitespace",
                };
isettings.Analysis.TokenFilters.Add("mysynonym",synonymFilter);
 isettings.NumberOfReplicas = 1;
            isettings.NumberOfShards = 2;

            IndexState indexConfig = new IndexState
            {
                Settings = isettings,
            };

如果我注释掉这条线isettings.Analysis.TokenFilters.Add("mysynonym",synonymFilter);,其他一切都有效

它会抛出“未设置为对象实例的对象”错误。

我真的需要帮助,这是我第一次使用Nest Library

我正在使用ElasticSearch 6和最新版本的Nest Library。

c# elasticsearch nest
1个回答
0
投票

它看起来像Analysis上的isettings,或者TokenFilters上的isettings.Analysis是null。这是一个有效的例子

var isettings = new IndexSettings
{
    Analysis = new Analysis
    {
        TokenFilters = new TokenFilters()
    }
};

SynonymTokenFilter synonymFilter = new SynonymTokenFilter
{
    Format = SynonymFormat.Solr,
    SynonymsPath = "synonym.txt",
    Tokenizer = "whitespace",
};
isettings.Analysis.TokenFilters.Add("mysynonym", synonymFilter);
isettings.NumberOfReplicas = 1;
isettings.NumberOfShards = 2;

IndexState indexConfig = new IndexState
{
    Settings = isettings,
};

var client - new ElasticClient();

client.CreateIndex(new CreateIndexRequest("index", indexConfig));

这会创建以下JSON请求

PUT http://localhost:9200/index
{
  "settings": {
    "index.number_of_replicas": 1,
    "analysis": {
      "filter": {
        "mysynonym": {
          "synonyms_path": "synonym.txt",
          "format": "solr",
          "tokenizer": "whitespace",
          "type": "synonym"
        }
      }
    },
    "index.number_of_shards": 2
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.