2013-02-27 5 views
6

j'ai une demande en utilisant des termes ressemblant à:termes de requête de recherche élastique et marquer

{ 
"query": { 
    "bool": { 
    "should": [ 
     { 
     "terms": { 
      "subjects.id": [ 
      1, 
      2, 
      3 
      ], boost: 3 
     } 
     }, 
     { 
     "terms": { 
      "qualification_type.id": [ 
      3, 
      5 
      ], boost: 2 
     } 
     } 
    ] 
    } 
} 

Je travaille assez bien, mais attribue une meilleure note aux documents qui correspondent à trois sous réserve que le document correspondant à un seul sujet.

Ma question est la suivante: existe-t-il un moyen de forcer le score à être le même s'il y a un ou plusieurs match sur les sujets?

Merci d'avance!

+0

cela peut aider quelqu'un, je l'ai trouvé beaucoup plus tard après avoir cette même question http://www.elasticsearch.org/blog/understanding-query-then-fetch-vs-dfs-query- then-fetch/ –

Répondre

9

Vous pouvez convertir les requêtes de termes en filtres et les placer dans constant score query. Par exemple:

{ 
    "query": { 
     "bool": { 
      "should": [{ 
       "constant_score": { 
        "filter": { 
         "terms": { 
          "subjects.id": [1, 2, 3] 
         } 
        }, 
        boost: 3 
       } 
      }, { 
       "constant_score": { 
        "filter": { 
         "terms": { 
          "qualification_type.id": [3, 5] 
         } 
        }, 
        boost: 2 
       } 
      }] 
     } 
    } 
} 
+0

Oui, j'y ai pensé, et j'ai essayé. Mais alors je ne peux pas mettre en place deux différents boost à droite? Je modifie l'exemple pour essayer d'être plus explicite à ce sujet. – momo

+0

Vous pouvez placer chaque filtre de termes dans sa propre requête constant_score. J'ai ajouté un exemple. – imotov

+0

Hey, merci beaucoup, ce fut une aide précieuse! J'ai essayé de jouer avec custom_score en faisant des choses similaires mais je n'ai jamais eu cette idée. Peut-être pourriez-vous me diriger vers la documentation où je pourrais trouver un exemple comme ça? J'ai cherché à peu près et n'ai pas trouvé quelque chose près. – momo

Questions connexes