나는 elasticsearch에 대한 초보자이며 우리는 우리 webstore에 대한 elasticsearch을 평가합니다. 한 가지 중요한 기능은 동의어를 사용하는 것입니다. 불행히도 동의어가있는 색인을 만들 수는 없습니다. 아무도 내가 동의어 기능을 어떻게 사용할 수 있는지 알려주세요. 이 기능과 elasticsearch 2.xx에 대한 샘플을 찾지 못했습니다. 목표는 내가 힐스를 검색하면 로얄의 항목을 찾을 수 있어야합니다.Elasticssearch Nest 동의어 2.XX
나는 다음 코드를 사용합니다 동의어
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")));
}
감사합니다,
도미니크
NEST 2.x를 사용하고 있습니까? – Rob
안녕하세요, NEST V 2.4.6을 사용하고 있습니다. 동의어로 검색하기위한 작업 예제가 필요합니다. – ROEMING