¿Cuál es la mejor manera de indexar un documento PDF o Word para la búsqueda de texto completo?

Tengo que desarrollar una aplicación offline con las siguientes funcionalidades:

  1. Tener una interfaz de inicio de sesión, lo que significa que tengo que manejar los roles de acceso.
  2. Una interfaz que permite a los usuarios agregar documentos con metadatos específicos. Esos documentos deben permanecer en el sistema de archivos local, por razones de seguridad.
  3. Permita que un usuario busque un documento con filtros específicos (cómo puedo analizar, indexar esos datos, como PDF, Word, etc.).
  4. Permita que el usuario copie, pegue y guarde los documentos.
  5. Asegurar la migración de los datos (documentos).

Mis preguntas:

  • ¿Qué arquitectura será más útil (aplicación web MVC de n niveles que usa Java, con)?
  • ¿Debo usar un motor de búsqueda (ElasticSearch, Solr, Lucene) ya que tengo miles de documentos, o simplemente un RDBMS (MySQL) o NoSQL DB (como MongoDB) que apuntará a mi sistema de archivos que contiene mis documentos?
  • ¿Debo usar HADOOP, ya que es una aplicación fuera de línea?
¿Por qué has revertido mi edición?
¡Lo siento, estaba pensando que lo acepté!
Bien, np; Lo hice rodar hacia atrás. -- ¿Se perdió algunas palabras después de "con" en "aplicación web MVC de n niveles usando Java, con"?

Respuestas (1)

"¿Debería usar el motor de búsqueda?"

Absolutamente. Si bien todas las bases de datos permiten algún tipo de búsqueda de texto completo, es su característica clave (hasta donde yo la tengo), por lo que debe usar la mejor de su clase. He tenido buenas experiencias con ElasticSearch y elasticsearch -mapper-attachments .

En cuanto al almacenamiento de back-end: elasticsearch-mongodb-river admite archivos adjuntos almacenados en GridFS de MongoDB.

"¿Qué arquitectura será más útil?"

No te entiendo aquí, ya que primero escribes que tienes que desarrollar una aplicación offline y luego pides un Web-MVC. Te daré algunas notas para ambos.

En general, sugeriría un backend de servidor de 3 niveles, con MongoDB construyendo el nivel 3, ElasticSearch en el nivel 2 y una API REST/XMLRPC/SOAP construyendo el frontend, lo que le permite usar este servicio desde una variedad de aplicaciones. No es que deba implementar alguna autenticación y autorización aquí. Para poner esto en funcionamiento en un tiempo razonablemente rápido, usaría Spring Data ElasticSearch junto con Spring-Security. Junto con Spring Data REST, esto debería permitirle realizar esta configuración bastante rápido, siempre que tenga algo de experiencia con Spring.

Una vez que haya configurado esto, puede crear una aplicación web que realice llamadas API en su API de búsqueda o crear algún tipo de aplicación Swing, que utilice lo mismo. O construir ambos. En cuanto a la aplicación web, depende de sus requisitos funcionales y no funcionales, que simplemente no sé, y esto no se puede responder fácilmente y, por lo general, requiere un análisis extenso. No hay una respuesta "única para todos" a eso.

En cuanto a la tecnología a usar: para una web, ya que la API de búsqueda está desarrollada en Java, me quedaría con ella. Si siguió mis sugerencias con la API de búsqueda: use las mismas herramientas, use Spring Web-MVC o Spring Boot. Una alternativa podría ser una aplicación Node, según sus habilidades. La ventaja de desacoplar la búsqueda real de la aplicación es que básicamente puedes elegir lo que quieras: Django, Rails, Sails, lo que sea.

"¿Debería usar HADOOP, ya que es una aplicación fuera de línea?"

Hadoop está, por definición, en red. Simplemente no entiendo lo que quiere decir con esta pregunta, pero creo que se responde con lo anterior.

gracias por su respuesta, por lo que sugiere una aplicación web de 3 niveles con MongoDB, Elastic y Spring MVC, Spring Security para la autenticación. Sin embargo, todavía no sé cómo mapear mis documentos (Word, PDF, ...) con mi aplicación, ¿debería vincular mongodb al sistema de archivos o a elasticsearch? ¿Por qué no usar solo Solr o lucene ya que no es una aplicación distribuida? Tendré problemas de escala. Al menos, ¿puede compartir conmigo algunos recursos útiles o tutoriales en los que pueda ponerme en marcha con esta solución de 3 niveles, por favor? Saludos
@Naou, me temo, pero tienes que buscar esto tú mismo. No hay tutorial para esto. Y vincula ElasticSearch a GridFS de MongoDB (donde almacena los archivos). Puede usar Solr o Lucene, pero tendrá que integrarlo usted mismo. Con las pilas que sugerí, el esfuerzo es relativamente pequeño;). ¿Problemas de escalado? No, si sabes cómo escalar correctamente. Escalar es algo muy difícil de hacer correctamente y está fuera del alcance. Pero en general, sí, la configuración que sugerí es casi infinitamente escalable. El recurso más útil para principiantes: university.mongodb.com/courses/M102/about
Gracias, ¿podría compartir su arquitectura configurada en github para usarla como punto de partida?