2013-02-27 17 views
6

Ich habe eine Anfrage Begriffe suchen, wie mit:Elastic Suchabfrage- Begriffe und Scoring

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

ich ziemlich gut funktioniert, aber Attribute ein besseres Ergebnis zu Dokumenten, die als auf das Dokument drei Themen entsprechen nur einem Thema passen.

Meine Frage ist: Gibt es eine Möglichkeit, den Punktestand zu erzwingen, wenn es eine oder mehrere Übereinstimmungen bei den Themen gibt?

Vielen Dank im Voraus!

+0

dies jemanden helfen kann, ich fand es sehr viel später, nachdem dieselbe Frage mit http://www.elasticsearch.org/blog/understanding-query-then-fetch-vs-dfs-query- then-fetch/ –

Antwort

9

Sie können die Begriffe Abfragen in Filter konvertieren und in constant score query umwandeln. Zum Beispiel:

{ 
    "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

Ja, ich habe darüber nachgedacht und es versucht. Aber dann kann ich nicht zwei verschiedene Boost richtig einrichten? Ich bearbeite das Beispiel, um es deutlicher zu machen. – momo

+0

Sie können jeden Begriffsfilter in eine eigene constant_score-Abfrage umbrechen. Ich habe ein Beispiel hinzugefügt. – imotov

+0

Hey, vielen Dank, es war eine große Hilfe! Ich habe versucht, mit custom_score zu spielen, indem ich ähnliche Sachen gemacht habe, aber diese Idee habe ich nie bekommen. Vielleicht könnten Sie mich auf die Dokumentation verweisen, wo ich ein Beispiel finden könnte? Ich habe ziemlich viel gesucht und nichts in der Nähe gefunden. – momo