2010-11-25 17 views
8

Estoy desarrollando un componente de búsqueda de una aplicación web usando Lucene. Me gustaría guardar las consultas de los usuarios en un índice y usarlas para sugerir consultas alternativas a los usuarios y para mantener las estadísticas de las consultas (las consultas más utilizadas, las mejores puntuaciones, ...).Mantener estadísticas de consulta usando lucene

Para utilizar estos datos para las sugerencias de consulta alternativas, analizaría las consultas para ver qué términos se utilizan con más frecuencia entre sí y lo usaría para crear una sugerencia para el usuario.

Pero no puedo determinar en qué forma indexar los datos. Estaba pensando en simplemente agregar las consultas al índice, pero de esa manera podría haber una gran cantidad de datos redundantes, ya que muchos documentos en el índice tendrían el mismo contenido. ¿Alguien tiene alguna idea sobre la forma en que esto se puede lograr?

Gracias por la ayuda.

Respuesta

1

"Estaba pensando en la simple adición de las consultas en el índice, pero de esa manera no puede haber una gran cantidad de datos redundantes, ya que muchos documentos del índice tendrían el mismo contenido"

Usted puede tell Lucene no almacenar el contenido del documento, lo que significa que la principal sobrecarga serán los Términos únicos, y el índice mismo. Por lo tanto, puede no ser una gran sobrecarga almacenar cada consulta como un documento único ... de esta manera no estará descartando ninguna información.

+0

Pensé en hacer eso, pero también necesito mantener algunas estadísticas sobre las consultas (número de veces que se utilizaron, número de visitas) y la única forma en que puedo pensar para lograr esto es almacenar el número de veces utilizado en el índice e incrementarlo antes de actualizar el documento, pero parece una operación costosa. – jbradaric

+0

¿Puedes usar las Frecuencias a Término de lucene para hacer esto? http://stackoverflow.com/questions/667389/get-term-frequencies-in-lucene. Si desea hacer las recomendaciones de consulta en tiempo real, querrá precomputar el término Freq's con anticipación y almacenarlas. – Joel

+0

Puedo usar TermFrequencies si no almaceno las consultas como un campo único, pero esperaba evitar eso. Pero parece que tendré que almacenar las consultas como no únicas hasta que encuentre una mejor solución, si la solución existe. – jbradaric

1

En primer lugar, creo que debe almacenar las consultas por separado del índice existente. El problema no son los datos redundantes sino más bien "diluir" su índice: almacenar las consultas en el mismo índice puede dañar la relevancia de sus búsquedas. Algunas opciones para esto son:

  • Utilice un índice de Lucene por separado.
  • Use Solr, con dos cores separados, uno para los documentos y el otro para las consultas.
  • Utilice un registro de consultas. Almacenar puntajes con las consultas. Genere estadísticas de consultas mediante postprocesamiento. Como se trata de una aplicación web, probablemente pueda utilizar un contenedor de servlets, como los registros de Tomcat, para esto.

En segundo lugar, Auto-Suggest From Popular Queries Using EdgeNGrams sugiere una implementación alternativa de sugerencia de consulta utilizando Solr.

+0

O podrían simplemente almacenarse como un tipo de documento distinto en el mismo índice, pero sí, probablemente sea mejor separarse datos reales de datos auxiliares. – Joel

Cuestiones relacionadas