2017-07-06 20 views
0

文書に「hello」と「hello hello」が含まれているときに「hello」を検索すると、「hello」のスコアリングが高くなります。elasticsearch:ngramアナライザを使用するときに繰り返しスコアリングを避ける

私はngramインデックスと検索アナライザを使用しています。 (これは他のシナリオでは本当に必要なので)「こんにちはこんにちは」は2回マッチして、結果としてトップになります。私がこれを避ける方法はありますか?私はすでにタームクエリー、マッチフレーズクエリー、マルチマッチクエリーのすべてを "hello hello"というスコアで試しました。

答えて

0

私は、文書の重複した分析されていない(キーワード)列を追加し、bool節を使用して用語クエリを強化しました。

var res = client.Search<MyClass>(s => s 
    .Query(q => q 
    .Bool(
     b1 => b1.Should(
      s1 =>s1 
      .Term(m=>m 
       .Field(f => f._DUPLICATE_COLUMN) 
       .Value("hello") 
       .Boost(1) 
      ), 

      s1=>s1.Match(m => m 
      .Field(f => f.MY_COLUMN) 
      .Query("hello") 
      .Analyzer("myNgramSearchAnalyzer") 
      ) 
     ) 
     .MinimumShouldMatch(1) 
    ) 
) 
);