2017-03-14 10 views
0

ギリシャ文字とラテン文字で検索するには弾性を使用しています。私の主な問題は正確な検索ができないことです。インデックスにedgeNgramフィルタを使用していますが、そして例length.For私の言葉によると、検索時の最大私は、まず第二に、「ΤΙΤΑΝΙΟΥ」と「チタノックス」を取得します「チタノックス」と入力した場合.Hereは私のインデックス作成です:EdgeNGramを使用したElasticSearchによる正確な検索

var response = client.CreateIndex(index, s => s 
      .Settings(s1 => s1 
.NumberOfShards(5) 
.NumberOfReplicas(5) 
.Analysis(a => a.TokenFilters(t => t.IcuTransform("greeklatin", it => it.Id("Greek-Latin; NFD; [:Nonspacing Mark:] Remove; NFC")// 
.Direction(IcuTransformDirection.Forward)) // 
.IcuTransform("latingreek", lg => lg.Id("Greek-Latin; NFD; [:Nonspacing Mark:] Remove; NFC") 
.Direction(IcuTransformDirection.Reverse)) 
.EdgeNGram("greekedge", ed => ed.MaxGram(7) 
.MinGram(1) 
.Side(EdgeNGramSide.Front)) 
.Stop("greekstop", sw => sw.StopWords()) 
.Lowercase("greeklowercase", gl => gl.Language(Language.Greek.ToString())) 
.KeywordMarker("greekkeywords", gk => gk.Keywords("")) 
.Stemmer("greekstemmer", gs => gs.Language(Language.Greek.ToString()))) 
.Analyzers(a1 => a1 
.Custom("greek", t => t.Tokenizer("standard") 
.Filters("greekedge", "greekstop", "greeklowercase", "greekkeywords", "greekstemmer", "greeklatin"))))) 
.Mappings(m => m.Map(type, mt => mt.Properties(c => c.Text(c1 => c1.Name("id").Analyzer("greek")) 
.Text(c2 => c2.Name("brand").Analyzer("greek")) 
.Text(c3 => c3.Name("service").Analyzer("greek")) 
.Text(c4 => c4.Name("servicegroupdesc").Analyzer("greek")) 
.Text(c5 => c5.Name("servicecategorydesc).Analyzer("greek")) 
.Text(c6 => c6.Name("partscategory").Analyzer("greek")) 
.Text(c7 => c7.Name("partsid").Analyzer("greek")) 
.Text(c8 => c8.Name("partsdesc").Analyzer("greek")))))); 

、ここで私の検索

var response = client.Search<Cars>(n => n 
         .Index(index) 
         .Type(type) 
         .Query(m => m.MultiMatch(q => q 
          .Analyzer(analyzername) 
          //.MinimumShouldMatch("100%") 
          .Query("*" + searchWord + "*") 
          .Fields(f=>f.Field(fieldsForSearchList[0])) 
          .Fuzziness(Fuzziness.EditDistance(0)))) 
         .Size(searchSize) 
         .From(0) 
         .TrackScores(true) 

        ); 
+2

質問に字下げを修正できますか?誰もがそれを読んで助けてくれるのは難しいだろう –

+0

問題はedgeNgramを使って生成されると思うが、どのように解決できるのだろうか? – grlouk

答えて

0

解決策はこのクエリに追加することですユーザーが入力した単語を追加するための新しいクエリ。これにより、より正確な検索を実現できます。

関連する問題