2012-03-22 4 views
8

Nel mio caso, i documenti hanno due campi, ad esempio "titolo" e "visualizzazioni". "views" è rappresentato dal numero di volte in cui le persone hanno visitato questo documento. come: "title": "iphone", "views": "10". Devo sviluppare una strategia che assegni dei pesi alle viste, come il punteggio di pertinenza calcolato da punteggio (titolo) * 0.8 + punteggio (viste) * 0.2. Lucene può farlo? E voglio sapere se ci sono alcuni algoritmi relativi a questa domanda.Lucene: come potenziare alcuni campi specifici

risposta

10

Ecco come si può fare:

Query titleQuery, viewsQuery; 

titleQuery.setBoost(0.8); 
viewsQuery.setBoost(0.2); 
BooleanQuery query = new BooleanQuery(); 
query.add(titleQuery, Occur.MUST); // or Occur.SHOULD if this clause is optional 
query.add(viewsQuery, Occur.SHOULD); // or Occur.MUST if this clause is required 

// use query to search documents 

Il punteggio sarà proporzionale alla 0.8*score(titleQuery) + 0.2*score(viewsQuery) (di una costante moltiplicativa).

Per sfruttare il campo views, sarà probabilmente necessario utilizzare ValueSourceQuery.

+0

se capisco che correctyl setBoost è stato deprecato e in questi giorni https://lucene.apache.org/core/5_5/core/org/apache/lucene/search/BoostQuery.html shoudl essere usato – Dannyboy

5

È possibile potenziare in 3 modi. A seconda delle necessità si potrebbe desiderare di impiegare una combinazione

livello di documento aumentando - mentre l'indicizzazione - chiamando document.setBoost() prima di un documento viene aggiunto all'indice.

Aumentare il livello del campo del documento - durante l'indicizzazione - chiamando field.setBoost() prima di aggiungere un campo al documento (e prima di aggiungendo il documento all'indice).

Boost di livello query - durante la ricerca , impostando un aumento su una clausola query, chiamando Query.setBoost().

fonte: http://lucene.apache.org/core/old_versioned_docs/versions/3_0_0/scoring.html

+0

document.setBoost() è obsoleto molto tempo fa. – Dannyboy