gpt4 book ai didi

elasticsearch - Elasticssearch Nest同义词2.XX

转载 作者:行者123 更新时间:2023-12-02 23:28:25 24 4
gpt4 key购买 nike

我是Elasticsearch的新手,我们正在评估我们的网上商店的Elasticsearch。一个重要功能是同义词的使用。不幸的是,我无法创建带有同义词的索引。请有人可以帮助我如何使用同义词功能。我没有找到此功能和elasticsearch 2.xx的任何示例。目标应该是,如果我搜索Hills,将找到Royal的条目。

我使用以下代码:

private ElasticClient GetClient()
{
var node = new Uri(ES_URI);

var uri = new Uri("http://localhost:9200");
var settings = new ConnectionSettings(uri).DefaultIndex("product");
var client = new ElasticClient(settings);

return client;

}


public void CreateSynonymIndex()
{
Product product = new Product()
{
Id = "2",
ProductName = "Royal",
Description = "Katzenfutter für Nierkranke"


};


var client = GetClient();
client.DeleteIndex("product");
var syn = new[] { "royal, hills => royal" };

ICreateIndexResponse respose = client.CreateIndex("product", c => c

.Mappings(mp => mp.Map<Product>(d => d.
Properties(p => p.String(n => n.Name(name => name.ProductName).Index(FieldIndexOption.Analyzed)))))

.Settings(s => s
.Analysis(an => an
.Tokenizers(at=>at.Pattern("synonymTokenizer",pa=>pa.Pattern("Test")))
.Analyzers(a=>a.Custom("synonymAnalyser",ca =>ca
.Tokenizer("synonymTokenizer")
.Filters(new List<string> { "synonym" })))
.TokenFilters(tf => tf
.Synonym("synonym", sy => sy.Synonyms(syn)
.Tokenizer("whitespace")
.IgnoreCase(true)))))
);

client.Index(product);


}

public void ES_Search()
{
var client = GetClient();
var response = client.Search<Product>(search => search
.Query(q => q.Bool(b => b
.Should(
// s => s.Match(m => m.Query("sometest").Field(f => f.ProductName).Boost(1.1)),
s => s.Match(m => m.Query("hills").Field(f => f.ProductName).Fuzziness(Fuzziness.EditDistance(1)))
))));

var response1 = client.Search<Product>(s => s.Query(q => q.Term(p => p.ProductName, "hills")));

}

问候,

多米尼克

最佳答案

您已经创建了带有同义词的分析器,但是没有使用它。您需要告诉elasticsearch ProductName字段应使用synonymAnalyser分析器。

.Mappings(mp => mp.Map<Product>(d => d.
Properties(p => p.String(n => n
.Name(name => name.ProductName)
.Analyzer("synonymAnalyser")
.Index(FieldIndexOption.Analyzed)))))

我注意到了几件事:
  • 提醒您,调用client.Index(..)方法后,该文档在Elasticsearch中不会立即可用。这将需要几毫秒的时间。在索引文档之后立即搜索,可能找不到。您可以阅读有关它的更多信息。here
  • 我不知道您是否使用默认索引创建ElasticClient,因为您没有共享它。如果没有,您将必须在搜索 call 中将其指定,例如client.Search<Product>(s => s.Index("product"))

  • 希望对您有帮助。

    关于elasticsearch - Elasticssearch Nest同义词2.XX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39811219/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com