我需要使用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。
它看起来像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
}
}