2016-06-15 2 views
0

Nest API를 사용하여 Elastic에서 동의어를 얻는 데 어려움을 겪고 있습니다.Nest를 통해 Elasticsearch에서 동의어 사용하기

내 색인과 적절한 설정을 모두 설정했지만 동의어 여야하는 용어를 기반으로 쿼리 할 때 전혀 적용되지 않은 것처럼 결과가 나타납니다.

m_objNode = new Uri(Properties.Settings.Default.strLocalElasticSearchURL); 
m_objConnectionSettings = new ConnectionSettings(m_objNode, defaultIndex: "myIndex"); 
m_objElasticClient = new ElasticClient(m_objConnectionSettings); 

IndexSettings indexSettings = new IndexSettings(); 
indexSettings.NumberOfReplicas = 1; 
indexSettings.NumberOfShards = 1; 

CustomAnalyzer exclamation = new CustomAnalyzer(); 
exclamation.Tokenizer = "exclamationTokenizer"; 

indexSettings.Analysis.Tokenizers.Add("exclamationTokenizer", new PatternTokenizer { 
    Pattern = @"!" 
}); 

indexSettings.Analysis.Analyzers.Add("exclamation", exclamation); 
indexSettings.Analysis.TokenFilters.Add("synonym", new SynonymTokenFilter { Synonyms = new[] { "tire => tyre", "aluminum => aluminium" }, IgnoreCase = true, Tokenizer = "whitespace" }); 

m_objElasticClient.CreateIndex(c => c 
    .Index("myIndex") 
    .InitializeUsing(indexSettings) 
    .AddMapping<myClass>(m => m 
     .MapFromAttributes() 
     .IndexAnalyzer("english") 
     .SearchAnalyzer("english")        
     )); 

그리고 객체는이 같은 색인 모양이야 : 여기 내 설정 내가 필드 JATitle 및 JABody는 동의어로 정렬 할 얻으려고

[ElasticType(IdProperty = "JAUniqueKey")] 
public class myClass { 

    public string JAUniqueKey { get; set; } 
    public int JAItemID { get; set; } 
    public string JATitle { get; set; } 
    public string JABody { get; set; } 
} 

합니다.

모든 아이디어가 환영받을 것입니다.

덕분에, ScrappyT

+0

NEST 및 elasticsearch의 어떤 버전을 사용하십니까? – Rob

+0

안녕, 롭, 지연에 사과, 나는 연가에 있었어. Nest와 ElasticSeach에 대한 DLL은 1.4.2 버전입니다. ElasticSearch 노드 자체는 1.7.5를 실행합니다. - 감사합니다. ScrappyT – ScrappyTexas

답변

0

올바르게 토큰 필터를 만든하지만 당신은 사용자 정의 분석기에 대한 필터에 추가하지 않았다.

IndexSettings indexSettings = new IndexSettings(); 
indexSettings.NumberOfReplicas = 1; 
indexSettings.NumberOfShards = 1; 

CustomAnalyzer exclamation = new CustomAnalyzer(); 
exclamation.Tokenizer = "exclamationTokenizer"; 
exclamation.Filter = new List<string> {"synonym"}; 
indexSettings.Analysis.Tokenizers.Add("exclamationTokenizer", new PatternTokenizer 
{ 
}); 

indexSettings.Analysis.Analyzers.Add("exclamation", exclamation); 
indexSettings.Analysis.TokenFilters.Add("synonym", new SynonymTokenFilter { Synonyms = new[] { "tire => tyre", "aluminum => aluminium" }, IgnoreCase = true, Tokenizer = "whitespace" }); 

희망이 있습니다.