¿Cómo implementar la búsqueda de documentos de un usuario específico?

En mi proyecto actual, los usuarios pueden like canciones, y ahora voy a agregar una búsqueda de canciones para que un usuario pueda buscar alguna canción que tenga liked antes.

He implementado motores de búsqueda usando xapian antes, lo que implica construir índices de documentos periódicamente.

En mi caso, ¿tengo que crear índices para las canciones de cada usuario de forma independiente?

Si quiero que los resultados de la búsqueda sean más real-time, ¿significa esto que necesito crear índices de forma incremental cada breve período de tiempo?

preguntado el 09 de marzo de 12 a las 14:03

1 Respuestas

Para tomar sus preguntas por separado.

¿Tengo que crear índices para las canciones de cada usuario de forma independiente?

No; una técnica común para este tipo de situación es indexar cada like por separado tanto la información sobre la canción como adicionalmente el identificador del usuario. Luego, cuando realiza una búsqueda, desea filtrar los resultados de la búsqueda de texto natural del usuario por el identificador de usuario que realmente inició sesión.

En Xapian, haría esto agregando un término que represente al usuario (con un prefijo adecuado, por lo que podría tener XU175 para un usuario con id 175, tal vez), y luego usando OP_FILTER para restringir la búsqueda a solo me gusta del usuario que inició sesión.

¿Necesito crear índices de forma incremental cada breve período de tiempo [para admitir la indexación en tiempo real]?

Esto depende completamente del sistema de búsqueda que esté utilizando. Con Xapian puede hacer eso y 'compactar' periódicamente las bases de datos generadas en una base; o puede indexar en vivo en la base de datos, aunque dado que Xapian es de un solo escritor, le gustaría encontrar una forma de serializar esto, como poner nuevos Me gusta en una cola y tener un solo proceso que los saque e indexe. en la base de datos. Una solución en gran parte lista para usar para esto sería usar Reposar, escrito por uno de los desarrolladores de Xapian, que cumple el mismo tipo de función que Solr hace para Lucene.

También puede volverse más elegante al indexar en una base de datos, luego replicarla en otra y buscar la versión replicada, lo que también le brinda opciones para escalar horizontalmente en el futuro. Hay una discusión de la replicación en la documentación de Xapian.

respondido 10 mar '12, 17:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.