2012-02-10 5 views
7

Quiero tener resultados de búsqueda de SOLR ordenó así:documentación del pedido Solr con idéntico marcador de fecha añadió descendente

Todos los documentos que tengan la misma puntuación se ordenará por fecha descendente añadió.

Así que cuando consulto solr tendré n documentos. En este conjunto de resultados habrá grupos de documentos con el mismo puntaje. Quiero que cada uno de este grupo de documentos se ordene descender por fecha agregada.

descubrí que puedo lograr esto mediante consultas de función, más exactamente usando rord función http://wiki.apache.org/solr/FunctionQuery#rord, pero como se indica en la documentación

ADVERTENCIA: a partir de Solr 1.4, ord() y Rord() puede causa exceso de memoria use ya que deben usar una entrada de Caché de campo en el lector de nivel superior, mientras que las consultas de clasificación y función ahora usan entradas en el nivel de segmento. Por lo tanto, ordenar o usar una consulta de función diferente, además de ord()/rord() duplicará el uso de la memoria.

causará exceso de memoria.

¿Qué otras opciones tengo?

Estaba pensando en usar recip(ms(NOW,startTime),1,1,0). Es este el mejor enfoque ?

¿Hay algún impacto negativo en el rendimiento si uso recip y ms?

+0

¿Está realmente seguro de que desea ordenar por fecha solo para documentos con el mismo puntaje? En mi experiencia, esto siempre ha sido incorrecto. Mejora de los documentos recientes que influyen en la puntuación de solr con una consulta de función que simplemente ordenar como lo describió. – javanna

+0

Esta es una muy buena pregunta, gracias. Los resultados de búsqueda más importantes para mí son los que coinciden con las palabras clave de la frase de búsqueda. Después de esto, es importante qué tan nuevo es el documento. También, estoy continuamente eliminando documentos obsoletos del índice. – Dorin

+0

Me alegra ayudar, eche un vistazo a mi respuesta. – javanna

Respuesta

16

Puede utilizar varias condiciones de clasificación:

ordenamientos son múltiples pueden estar separados por una coma, es decir: sort = + [, +] ...

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

Por lo tanto, en su caso sería: ordenar = puntuación DESC, fecha_añadida DESC

+0

muy inteligente. gracias :) – Dorin

5

Dado que sus preguntas dicen:

Todos los documentos que tengan el mismo puntaje se ordenarán descendiendo por fecha agregada.

la otra respuesta que recibió es perfecta.

De todos modos, le sugiero que se asegure de que realmente desea ordenar por fecha solo para el documento con el mismo puntaje. En mi experiencia, esto siempre ha sido incorrecto. De hecho, el puntaje de solr no es absoluto sino solo relativo a otros documentos, y cada documento es diferente.

Por lo tanto, no ordenaría por puntaje y luego algo más, porque es difícil predecir cuándo tendrá el mismo puntaje para diferentes documentos. Personalmente ordenaría solo en score y usaría una función para impulsar documentos recientes. Puede encontrar un buen ejemplo en el solr wiki, la función utilizada es recip(ms(NOW,date_field),3.16e-11,1,1).

Si le preocupa el rendimiento, puede intentar aumentar el índice de tiempo, lo que debería ser más rápido que aumentar el tiempo de consulta. Eche un vistazo here.

Cuestiones relacionadas