2010-10-29 15 views
7

Esto es más una cuestión de teoría que de práctica. Estoy trabajando en un proyecto que es un catálogo bastante simple de enlaces. El modelo completo es similar al catálogo de Dmoz o Yahoo, excepto que cada entrada tiene ciertos atributos adicionales.Recomendaciones de búsqueda Recomendaciones

Tengo taxonomía jerárquica trabajando en todas las entradas con relación muchos a muchos, todas las entradas ahora se ordenan en estas categorías, y todo parece funcionar bien. Ahora, ¿de qué sirve un catálogo si no hay una opción de búsqueda?

Aquí hay un poco más de detalle sobre mis modelos: cada entrada tiene un título, descripción, URL y varios perfiles sociales: YouTube, Twitter, Flickr y un par de otros. Cada entrada podría tener un logotipo adjunto y un campo oculto para las etiquetas. Además, el título y la descripción se almacenan en tres idiomas diferentes. Así que básicamente me gustaría los resultados de búsqueda a ser:

  1. relevantes (incluyendo taxonomía)
  2. Posiblemente los logotipos con
  3. Posiblemente los que tienen 100% llenaron perfiles

tengo Intenté con Sphinx y actualmente estoy trabajando con Lucene, pero parece que no estoy obteniendo la búsqueda correcta en teoría. Espero que tenga sentido que las entradas completas aparezcan más altas que las otras, pero no puedo descifrar las puntuaciones. No me gustaría que las entradas irrelevantes aparezcan en la parte superior si solo hay una coincidencia de palabras en toda la descripción, ya que los títulos son más relevantes.

Así que mi pregunta es - ¿hay libros, técnicas o incluso otros motores de búsqueda (si Esfinge y Lucene no son lo suficientemente bueno) que usted recomendaría para este asunto? No solo me gustaría tener un control total sobre los resultados de búsqueda y su clasificación, sino también brindar a los visitantes la información correcta y relevante.

¡También se agradecen los enlaces en artículos geniales!

Y Sin, no estoy tratando de reconstruir Google :)

Gracias :)

+1

P.S. Estoy dispuesto a dar una recompensa por la mejor respuesta. – kovshenin

Respuesta

4

Estoy bastante seguro de que Lucene es suficiente. Hemos resuelto una tarea similar y lo hicimos bien. Aquí hay algunos consejos que puedo proponerle que vuelva a mirar mi proyecto en Lucene.Net.

Taxonomía:

  • Categoría ha representado como clave número entero en dB, por lo que cada documento tiene varias copias de campo 'categoría' de tipo Number. Por ejemplo, documento: [1,2,5,10, 'Rueda'] - significa que la rueda pertenece a cada una de las categorías.
  • campos

no investigables (logos, perfil social):

  • Por supuesto que puede almacenar valores no pueden buscar en campos no indexados de Lucene. Pero hemos almacenado toda la información relacionada con el producto en DB para evitar la reconstrucción del índice de Lucene. De modo que Lucene solo posee una ID de producto y valores indexados pero almacenados para campos clave.

tres idiomas y múltiples campos:

  • Tenemos sólo 2 idiomas. De modo que diferentes títulos de producto pueden almacenarse en el mismo documento de Lucene y relacionarse con una identificación única del producto (cuando escribo antes de que la ID se refiera a la base de datos). Esto le permite buscar productos incluso si la solicitud del usuario usa una combinación de idiomas.
  • Obviamente, el título, las etiquetas y la descripción tienen un peso diferente para los resultados de búsqueda. Lucene lo maneja asignando al peso del campo.
5

excelente libro: Lucene in Action (2nd edition)

Cuando empezamos con Lucene tuvimos la primera edición, lo que realmente se lleva a través de todo lo necesario paso a paso. Muy recomendable. La 2da edición se actualiza para la versión más reciente y mejor (3.x.x).

El algoritmo Tf-Idf funciona muy bien en textos (más grandes), pero si tiene una estructura tipo registro puede ser contraproducente: los documentos con algunos términos se consideran más "relevantes" que los que tienen muchos términos. Con Lucene, conseguirás que funcione, pero tendrás que ensuciarte las manos.

Lo que básicamente tendrá que hacer es boost your title field, por lo que se vuelve más relevante. También puede llamar al change the scoring mechanism para asignar puntajes más altos a los documentos que tienen más información.

Diviértete. Si no puede resolverlo, hay un soporte excelente en el Lucene mailinglist.

1

Lucene o Solr harían el trabajo. Solr está construido sobre lucene, see here for more info

Me gustaría ir con solr. descargar + configurarlo es fácil y rápido. Comienza con el tutorial y mi link collection. La relevancia debería estar bien con Solr y es fácil de ajustar.

Busque en Dewfy y Matthijs Bierman la respuesta para algunos puntos buenos.

A continuación, elija el controlador de consultas dismax y puede preferir documentos con ciertas propiedades.

E.g. para el porcentaje de un perfil completo, usted define un campo separado 'profile_completness' luego puede agregar profile_completeness a bf (boostfunction) del controlador de dismax: cuanto más completo sea el perfil, más aumentarán esos documentos.

He mencionado antes que puede ajustar fácilmente la relevancia: p. puedes configurar bf a sth. como: bf=title^10 tags^5 profile_completeness^1

"Posiblemente los que tienen logotipos" se pueden resolver mediante consultas de impulso: bq=logo:[* TO *]^1. Donde logo:[* TO *] significa "solo documentos que contienen el logotipo de campo"

Para visualizar un árbol de categorías profundamente anidado necesitará crear ese árbol en la memoria y alimentar a la solución con una importación especial. Tenemos una aplicación de trabajo para eso. Puede usar our approach

Si necesita más ayuda, no dude en comentar.

2

Trataré de agregar a las buenas respuestas de Matthijs, Dewfy y Karussell. Básicamente, intentas mejorar la relevancia de tu búsqueda. Sugiero que lea Grant Ingersoll's Debugging Search Application Relevance Issues y su Optimizing Findability in Lucene and Solr, así como su Practical Relevance slides.

Para diferentes idiomas y para facetas, sugiero que use Solr. Es un motor de búsqueda creado usando Lucene que es fácil de usar. Puede admitir varios idiomas utilizando un Solr Core diferente para cada idioma.

Cuestiones relacionadas