Open Source-Befehlszeilentools zum Indizieren einer großen Anzahl von Textdateien [geschlossen]

7

Ich suche nach Open Source-Befehlszeilentools oder Tools, mit denen ich eine große Anzahl von Nur-Text-Dateien indizieren und durchsuchen kann. Eine ungefähre Suche wäre ein Plus. Das Tool muss nur die übereinstimmenden Dateien drucken, obwohl ein Übereinstimmungskontext hilfreich wäre. Ein GUI-Tool ist für meine Anwendung nicht nützlich und auch nichts, das Dateien einzeln durchsucht (z. B. grep). Ich ziele im Grunde auf Unix-Plattformen (OSX, Linux, BSD).

BEARBEITEN: Ich interessiere mich nicht für ein Tool, das systemweit ist oder im Hintergrund ausgeführt werden muss. Grundsätzlich möchte ich einen Index für einen Verzeichnisbaum voller Textdateien erstellen und später danach suchen können. Der Index besteht vorzugsweise aus einer oder mehreren Dateien, deren Speicherort ich angeben kann.

Irgendwelche Ideen?

Ergosys
quelle
Fast auf jede Art und Weise müssen Sie jede Datei nach Übereinstimmungen durchsuchen. Selbst wenn Sie alles in eine Datenbank kopieren, wie eine Antwort vorschlägt, müssen Sie jede Datei einzeln in die Datenbank einspeisen. Ich weiß nicht, warum grep für Sie nicht funktioniert, aber es gibt Ihnen die genauen Ergebnisse, die Sie verlangen, die passende Datei und den Kontext des Spiels. Leiten Sie die Ausgabe einfach in eine Datei um und Sie haben einen durchsuchbaren Index. grep -r searchterm /somedir/* > index.txt
@ Gelöschtes Konto, Eine Abfrage mit grep ist O (n), wobei n die Anzahl der Dateien ist. Ein Index impliziert normalerweise eine Datenstruktur, die für die meisten Suchvorgänge besser als O (n) ist. Ihre index.txt-Idee ist schlimmer als grep an sich, da dies ein zusätzlicher Schritt ist, und ich bin mir wirklich nicht sicher, worum es geht. Ich habe kein Problem mit einer Datenbank, ich würde nur eine leichte wie SQLite oder ähnliches bevorzugen.
Ergosys

Antworten:

3

Wenn Sie nach Dateien anhand des Dateinamens suchen möchten :

Das Standard-Unix-Tool hierfür ist Suchen . Es erstellt eine Datenbank mit Dateien in einem Cron-Job und locatedurchsucht dann die Übereinstimmungen.

Es ist Teil der meisten Linux-Distributionen (normalerweise Paket "locate" oder "mlocate").

Wenn Sie nach Dateien nach Inhalten suchen möchten :

Es gibt eine Vielzahl von Suchmaschinen, die Dokumente für Sie indizieren (einige unterstützen sogar andere Formate als Nur-Text, z. B. Textverarbeitungsdokumente). Beispiele wären Beagle und Google Desktop Search . Es gibt eine ziemlich vollständige Liste auf Wikipedia:

http://en.wikipedia.org/wiki/List_of_search_engines#Desktop_search_engines

Bearbeiten:

Wenn Sie keine Suchmaschine möchten, die im Hintergrund ausgeführt wird oder automatisch alle Ihre Dateien indiziert, können Sie wahrscheinlich weiterhin eine Desktop-Suchmaschine verwenden. Mit den meisten von ihnen können Sie den Indizierungsprozess steuern, sodass Sie die Indizierung manuell starten und angeben können, welche Verzeichnisse indiziert werden sollen und wo die Indexdatei abgelegt werden soll.

sleske
quelle
Ich denke (obwohl ich nicht ganz sicher bin), dass die Frage auf eine Volltextsuche des Inhalts der Dateien und nicht nur des Dateinamens abzielt (für die die Suche tatsächlich ein perfektes Werkzeug ist).
BMK
@bmk: Ja, ich habe die Frage möglicherweise falsch verstanden. Ich habe meine Antwort bearbeitet.
Sleske
Ich interessiere mich nur für Inhalte. Und arbeiten die meisten Desktop-Engines nicht im Hintergrund und indizieren alle Ihre Dateien? Ich habe die Frage aktualisiert, um klarer zu machen, wonach ich suche.
Ergosys
2

Das Beste, was Sie tun können, ist, die Textdateien in eine MySQL-Datenbank einzuspeisen und das FullText-Matching-System zu verwenden. Dies führt zu sehr schnellen Suchvorgängen mit Rangfolgen, wie gut die Ergebnisse mit der Suche übereinstimmen.

Die Anbindung einer MySQL-Datenbank an andere Systeme, z. B. eine Website für die Dokumentensuche usw., wäre recht einfach.

Nützliche Ressourcen:

Majenko
quelle
2

Früher habe ich swish-e verwendet , aber das war vor ungefähr einem Jahrzehnt. Die Entwicklung scheint seitdem ins Stocken geraten zu sein (manchmal bedeutet Stillstand „stabil“, nicht „tot“), aber es könnte für Sie funktionieren.

Chris Johnsen
quelle
Nähte stabil: Subversion repo
shellholic
2

Ich habe gefunden, wonach ich gesucht habe. Swish ++ kann ein Verzeichnis von Dateien (nicht nur Text) indizieren und ist im Grunde eine Reihe von Befehlszeilentools. Es scheint eine Neufassung von Swish-e zu sein .

Ergosys
quelle
0

Wenn ein bisschen Python-Scripting für Sie in Ordnung ist, schauen Sie sich whoosh an: https://bitbucket.org/mchaput/whoosh/wiki/Home

Und ähm, ich denke du hast grep angeschaut. Wenn Ihre Dateibasis klein genug ist, um in den RAM (Puffer-Cache) zu passen, ist dies tatsächlich ziemlich schnell. Hängt natürlich davon ab, wie komplex Ihre Abfragen sind.

georg
quelle