2017-07-06 3 views
0

Supposons que je recherche "bonjour" quand le document contient "bonjour" et "bonjour bonjour" Je veux "bonjour" pour avoir un score plus élevé. J'utilise l'index ngram et l'analyseur de recherche. (Parce que j'ai vraiment besoin de cela pour d'autres scénarios) Donc, "bonjour bonjour" correspond deux fois et montre donc comme le meilleur résultat. Est-ce que je peux éviter cela? J'ai déjà essayé la requête à long terme, requête de phrase de match, requêtes multi-match tous les scores "bonjour bonjour" plus élevé.elasticsearch: Éviter les scores répétitifs lors de l'utilisation de l'analyseur ngram

Répondre

0

J'ai résolu cela en ajoutant une colonne non analysée (mot-clé) pour le document et la clause bool utilisée pour augmenter la requête à long terme.

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