2009-09-28 8 views
8

Tengo una instancia de solr que contiene documentos que tienen un campo 'startTime' que va desde el último mes hasta un año a partir de ahora. Me gustaría agregar una consulta/función de impulso para aumentar los puntajes de los documentos cuyo campo startTime está cerca de la hora actual.SOLR - Función Boost (bf) para aumentar la puntuación de documentos cuya fecha es la más cercana a NOW

Hasta ahora he visto muchos ejemplos que usan rord para agregar mejoras a los documentos que son más nuevos, pero nunca he visto un ejemplo de algo como esto.

¿Alguien me puede decir cómo hacerlo, por favor?

Gracias

+0

¿Has intentado preguntarle al usuario solr? –

Respuesta

15

Si estás en Solr 1.4 o superior, entonces usted tiene acceso a la función "MS" en las consultas de función, y el enfoque estándar, libro de texto para impulsar por lo reciente es:

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

ms da la cantidad de milisegundos entre sus dos argumentos. La expresión en conjunto aumenta los puntajes en 1 para los documentos fechados ahora, en 1/2 para los documentos fechados hace 1 año, en 1/3 para los documentos fechados hace 2 años, etc. (Consulte http://wiki.apache.org/solr/FunctionQuery#Date_Boosting, como señaló Sean Timm).

en el caso de que tenga documentos fechados en el futuro, y los que se les asigna una puntuación negativa por la función anterior, por lo que probablemente quiere lanzar en un valor absoluto, como esto:

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

abs (ms (NOW, startTime)) dará el # de milisegundos entre startTime y ahora, garantizado que no será negativo.

Ese sería un buen lugar para comenzar. Si lo desea, puede modificar el 3.16e-11 si es demasiado agresivo o no lo suficientemente agresivo.

Tangentialmente, la función ms solo funcionará en campos basados ​​en la clase TrieDate, no en las clases clásicas Date y LegacyDate. Si su schema.xml se basó en el ejemplo de Solr 1.4, entonces su campo de fecha probablemente ya esté en el formato correcto.

+1

Esta es una buena respuesta. Encontré otro que también explica por qué usan 3.16e-11 y cómo cambiarlo para satisfacer sus necesidades: http://stackoverflow.com/a/22213417/241367 – thekingoftruth

+0

Si esto no funciona, puede intentarlo: {! boost b = recip (rord (contentdate), 1,1000,1000)} –

Cuestiones relacionadas