2014-05-09 19 views
6

La mia comprensione della query del punteggio costante in elasticsearch è che il fattore di aumento sarebbe assegnato come punteggio per ogni query corrispondente. Il documentation dice:Constant Score Query elasticsearch boosting

Una query che racchiude un filtro o un'altra query e restituisce semplicemente un punteggio costante uguale a query boost per ogni documento nel filtro.

Tuttavia quando io mando questa domanda:

"query": { 
    "constant_score": { 
     "filter": { 
      "term": { 
       "source": "BBC" 
      } 
     }, 
     "boost": 3 
    } 
}, 
"fields": ["title", "source"] 

tutti i documenti corrispondenti sono dato un punteggio di 1 ?! Non riesco a capire cosa sto facendo male, e ho anche provato con query anziché filtro in constant_score.

+1

esegue la stessa query con [spiegare] (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-explain.html#search-request-explain) impostato su true e probabilmente otterrà una migliore comprensione del punteggio. – keety

risposta

2

punteggi sono significava solo essere relativo a tutte le altre colonne in un dato insieme risultato, quindi un set di risultati dove tutto ha il punteggio di 3 è la stessa di un set di risultati dove tutto ha il punteggio di 1.

In realtà, l'unico scopo della rilevanza _score è ordinare i risultati della query corrente nell'ordine corretto. Non dovresti provare a confrontare i punteggi di pertinenza di diverse query. - Elasticsearch Guide

O il punteggio costante viene ignorato perché non viene combinato con un'altra query o viene normalizzato. Come ha detto @keety, controlla l'output di explain per vedere esattamente cosa sta succedendo.

0

Constant score query fornisce un punteggio uguale a qualsiasi documento di corrispondenza indipendentemente da fattori di punteggio come TF, IDF ecc. Questo può essere utilizzato quando non ti importa se un documento corrisponde ma solo se un documento corrisponde o meno e fornisce un punteggio troppo, a differenza di filter.

Se si vuole segnare 3 letteralmente per tutti i documenti di corrispondenza per una determinata query, quindi si dovrebbe utilizzare function score query, qualcosa come

"query": { "function_score": { "functions": [ { "filter": { "term": { "source": "BBC" } }, "weight": 3 } ] } ... }