2009-09-28 8 views
8

Ho un'istanza di solr contenente documenti che hanno un campo 'startTime' che va dal mese scorso a un anno da oggi. Vorrei aggiungere una query/funzione boost per aumentare i punteggi dei documenti il ​​cui campo startTime è vicino all'ora corrente.SOLR - Funzione Boost (bf) per aumentare il punteggio dei documenti la cui data è più vicina a NOW

Finora ho visto molti esempi che usano Rord per aggiungere boost ai documenti che sono più recenti ma non ho mai visto un esempio di qualcosa di simile.

Qualcuno può dirmi come farlo per favore?

Grazie

+0

hai provato a chiedere su solr-user? –

risposta

15

Se siete su Solr 1.4+, allora si ha accesso alla funzione "ms" nelle query di funzione, e lo standard, approccio da manuale ad accrescere per data recente è:

recip(ms(NOW,startTime),3.16e-11,1,1) 

ms indica il numero di millisecondi tra i suoi due argomenti. L'espressione nel suo complesso aumenta i punteggi di 1 per i documenti datati ora, di 1/2 per i documenti datati 1 anno fa, di 1/3 per i documenti datati 2 anni fa, ecc. (Vedi http://wiki.apache.org/solr/FunctionQuery#Date_Boosting, come ha sottolineato Sean Timm.)

nel tuo caso si dispone di documenti datati in futuro, e quelli otterrà assegnato un punteggio negativo per la funzione di cui sopra, quindi probabilmente vorrebbe gettare in un valore assoluto, come questo:

recip(abs(ms(NOW,startTime)),3.16e-11,1,1) 

abs (ms (NOW, startTime)) darà il numero di millisecondi tra startTime e ora, garantito come non negativo.

Sarebbe un buon punto di partenza. Se vuoi, puoi modificare il 3.16e-11 se è troppo aggressivo o non abbastanza aggressivo.

Tangenzialmente, la funzione ms funziona solo su campi basati sulla classe TrieDate, non sulle classiche classi Date e LegacyDate. Se il tuo schema.xml era basato su quello di esempio per Solr 1.4, allora il tuo campo data è probabilmente già nel formato corretto.

+1

Questa è una buona risposta. Ne ho trovato un altro che spiega anche perché usano 3.16e-11 e come modificarlo per adattarlo alle tue esigenze: http://stackoverflow.com/a/22213417/241367 – thekingoftruth

+0

Se questo non funziona puoi provare: {! boost b = recip. (rord (contentdate), 1,1000,1000)} –

Problemi correlati