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")        
     )); 

そして、私は、インデックスは次のようになりだオブジェクト:

[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; } 
} 

私は同義語で整列するフィールドJATitleとJABodyを取得しようとしています。

どのようなアイデアも歓迎します。

おかげで、 ScrappyT

+0

NESTとelasticsearchのどのバージョンをお使いですか? – Rob

+0

こんにちは、ロブ、遅れて申し訳ありません、私は年中休暇をしています。私がNestとElasticSeachに持っているDLLはバージョン1.4.2です - ElasticSearchノード自体は1.7.5を実行しています - Thanks、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" }); 

希望します。

関連する問題