2012-02-10 11 views
7

voglio avere risultati di ricerca da SOLR ordinato in questo modo:documenti dell'Ordine Solr con stesso punteggio per Aggiunto scendendo

Tutti i documenti che hanno lo stesso punteggio sarà ordinato per data decrescente aggiunto.

Così quando interrogherò solr avrò n documenti. In questo set di risultati ci saranno gruppi di documenti con lo stesso punteggio. Voglio che ognuno di questo gruppo di documenti sia ordinato decrescente per data aggiunta.

ho scoperto che posso raggiungere questo obiettivo utilizzando query di funzione, più precisamente utilizzando rord funzione http://wiki.apache.org/solr/FunctionQuery#rord, ma, come si afferma nella documentazione

ATTENZIONE: come di Solr 1.4, ord() e ROrd() può causare l'eccesso di memoria utilizzare poiché devono utilizzare una voce FieldCache nel lettore di livello superiore, mentre le query di ordinamento e funzione ora utilizzano le voci a livello di segmento. Quindi l'ordinamento o l'uso di una query di funzione diversa, oltre a ord()/rord() raddoppierà l'uso della memoria.

causerà un uso eccessivo della memoria.

Quali altre opzioni ho?

Stavo pensando di utilizzare recip(ms(NOW,startTime),1,1,0). È questo l'approccio migliore?

C'è qualche impatto negativo sulle prestazioni se utilizzo recip e ms?

+0

Sei davvero sicuro di voler ordinare per data solo per documento con lo stesso punteggio? Nella mia esperienza, questo è sempre stato sbagliato. Migliorare meglio i documenti recenti che influenzano il punteggio Solr con una query di funzione piuttosto che l'ordinamento come descritto. – javanna

+0

Questa è una domanda molto buona, grazie. I risultati di ricerca più importanti per me sono quelli che corrispondono alle parole chiave della frase di ricerca. Dopo questo è importante quanto è nuovo il documento. Inoltre, sto eliminando continuamente i documenti obsoleti dall'indice. – Dorin

+0

Felice di aiutare, dare un'occhiata alla mia risposta. – javanna

risposta

16

È possibile utilizzare più condizioni di ordinamento:

più ordinamenti di ordinamento possono essere separati da una virgola, ad esempio: sort = + [+] ...

http://wiki.apache.org/solr/CommonQueryParameters

Quindi, nel tuo caso sarebbe: sort = punteggio DESC, data_added DESC

+0

molto intelligente. grazie :) – Dorin

5

Poiché le tue domande dicono:

Tutti i documenti che hanno lo stesso punteggio saranno ordinati decrescente per data aggiunta.

l'altra risposta che hai è perfetta.

Ad ogni modo, ti suggerisco di assicurarti di voler veramente ordinare per data solo per documenti con lo stesso punteggio. Nella mia esperienza, questo è sempre stato sbagliato. In effetti, il punteggio solr non è assoluto ma solo relativo ad altri documenti e ogni documento è diverso.

Quindi non selezionerei per punteggio e quindi qualcos'altro, perché è difficile prevedere quando si avrà lo stesso punteggio per documenti diversi. Ordinare personalmente solo su score e utilizzare una funzione per aumentare i documenti recenti. È possibile trovare un buon esempio su solr wiki, la funzione utilizzata è recip(ms(NOW,date_field),3.16e-11,1,1).

Se si è preoccupati per le prestazioni, è possibile provare l'aumento del tempo dell'indice, che dovrebbe essere più rapido del potenziamento del tempo di query. Dai uno sguardo allo here.