Was ist der beste Weg, um PDF- oder Word-Dokumente für die Volltextsuche zu indizieren?

Ich muss eine Offline-Anwendung mit folgenden Funktionalitäten entwickeln:

  1. Ich habe eine Anmeldeschnittstelle, was bedeutet, dass ich Zugriffsrollen handhaben muss.
  2. Eine Schnittstelle, die es Benutzern ermöglicht, Dokumente mit bestimmten Metadaten hinzuzufügen. Diese Dokumente müssen aus Sicherheitsgründen im lokalen Dateisystem bleiben.
  3. Ermöglichen Sie einem Benutzer, mit bestimmten Filtern nach einem Dokument zu suchen (wie kann ich diese Daten wie PDF, Word usw. analysieren, indizieren).
  4. Erlauben Sie dem Benutzer, die Dokumente zu kopieren, einzufügen und zu speichern.
  5. Stellen Sie die Migration der Daten (Dokumente) sicher.

Meine Fragen:

  • Welche Architektur ist am nützlichsten (n-Tier-MVC-Webanwendung mit Java, mit )?
  • Sollte ich eine Suchmaschine (ElasticSearch, Solr, Lucene) verwenden, da ich Tausende von Dokumenten habe, oder nur eine RDBMS (MySQL) oder NoSQL-DB (wie MongoDB), die auf mein Dateisystem verweist, das meine Dokumente enthält?
  • Sollte ich HADOOP verwenden, da es sich um eine Offline-App handelt?
Warum haben Sie meine Bearbeitung rückgängig gemacht?
Es tut mir leid, ich dachte, ich hätte es akzeptiert!
Okay, nein; Ich habe es zurückgerollt. -- Haben Sie einige Wörter nach dem "with" in "n-tier MVC web application using Java, with "?

Antworten (1)

"Soll ich eine Suchmaschine benutzen?"

Absolut. Während alle Datenbanken eine Art Volltextsuche ermöglichen, ist dies Ihr Hauptmerkmal (soweit ich es verstanden habe), also sollten Sie das Beste der Rasse verwenden. Gute Erfahrungen habe ich mit ElasticSearch und elasticsearch-mapper-attachments gemacht .

Was den Backend-Speicher betrifft: Der Elasticsearch-mongodb-river unterstützt Anhänge, die im GridFS von MongoDB gespeichert sind.

"Welche Architektur wird am nützlichsten sein?"

Ich verstehe Sie hier nicht, da Sie zuerst schreiben, dass Sie eine Offline-Anwendung entwickeln müssen, und dann nach einem Web-MVC fragen. Ich gebe Ihnen einige Notizen für beide.

Im Allgemeinen würde ich ein 3-Tier-Server-Backend vorschlagen, wobei MongoDB Tier 3, ElasticSearch in Tier 2 und eine REST/XMLRPC/SOAP-API als Frontend aufbaut, wodurch Sie diesen Dienst aus einer Vielzahl von Anwendungen nutzen können. Nicht, dass Sie hier eine Authentifizierung und Autorisierung implementieren sollten. Um dies in einer angemessen schnellen Zeit zum Laufen zu bringen, würde ich Spring Data ElasticSearch zusammen mit spring-security verwenden. Zusammen mit Spring Data REST sollte Ihnen dies ermöglichen, dieses Setup ziemlich schnell durchzuführen, vorausgesetzt, Sie haben etwas Erfahrung mit Spring.

Nachdem Sie dies eingerichtet haben, können Sie entweder eine Webanwendung erstellen, die API-Aufrufe für Ihre Such-API ausführt, oder eine Art Swing-Anwendung erstellen, die dieselbe verwendet. Oder beide bauen. Was die Webanwendung betrifft, hängt es von Ihren funktionalen und nicht-funktionalen Anforderungen ab, die ich einfach nicht kenne – und dies kann nicht einfach beantwortet werden und erfordert normalerweise eine ausführliche Analyse. Darauf gibt es keine „one-size-fits-all“-Antwort.

Was die zu verwendende Technologie betrifft: Da die Such-API für eine Web-Fronted in Java entwickelt wurde, würde ich dabei bleiben. Wenn Sie meinen Vorschlägen mit der Such-API gefolgt sind: Bleiben Sie bei den gleichen Tools, verwenden Sie Spring Web-MVC oder Spring Boot. Eine Alternative könnte je nach Ihren Fähigkeiten eine Node-Anwendung sein. Der Vorteil, die eigentliche Suche von der Anwendung zu entkoppeln, ist, dass Sie im Grunde alles auswählen können, was Sie wollen: Django, Rails, Sails, was auch immer.

"Soll ich HADOOP verwenden, da es sich um eine Offline-App handelt?"

Hadoop ist per Definition vernetzt. Ich verstehe einfach nicht wirklich, was Sie mit dieser Frage meinen, aber ich denke, sie ist mit dem oben Gesagten beantwortet.

Vielen Dank für Ihre Antwort, also schlagen Sie eine 3-Tier-Webanwendung mit MongoDB, Elastic und Spring MVC, Spring Security zur Authentifizierung vor. Ich weiß jedoch immer noch nicht, wie ich meine Dokumente (Word, PDF, ...) mit meinem abbilden soll sollte ich Mongodb mit dem Dateisystem oder Elasticsearch verknüpfen? Warum nicht nur Solr oder Lucene verwenden, da es sich nicht um eine verteilte Anwendung handelt, ich werde Skalierungsprobleme haben. Können Sie mir bitte zumindest einige nützliche Ressourcen oder Tutorials zur Verfügung stellen, in denen ich mit dieser 3-Tier-Lösung loslegen kann? Grüße
@Naou Ich fürchte, aber dafür musst du selbst graben. Dafür gibt es kein Tutorial. Und Sie verknüpfen ElasticSearch mit MongoDBs GridFS (wo Sie die Dateien speichern). Sie können Solr oder Lucene verwenden, aber Sie müssen es selbst integrieren. Bei den von mir vorgeschlagenen Stacks ist der Aufwand relativ gering ;). Skalierungsprobleme? Nein, wenn Sie wissen, wie man richtig skaliert. Skalierung ist eine sehr schwierige Sache und weit außerhalb des Rahmens. Aber im Allgemeinen ja, das von mir vorgeschlagene Setup ist fast unendlich skalierbar. Nützlichste Ressource für den Anfang: university.mongodb.com/courses/M102/about
Danke, könnten Sie bitte Ihre in Github eingerichtete Architektur teilen, um sie als Ausgangspunkt zu verwenden?