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
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.
È 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
document.setBoost() è obsoleto molto tempo fa. – Dannyboy
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