Volltextsuche von Dokumenten

Wir benötigen häufig eine Volltextsuch-API, die es unseren Anwendungen ermöglicht, Dokumente nach bestimmten Informationen zu durchsuchen, die als Textsuchabfrage angegeben sind. Die Dokumente können ein beliebiges Format haben, z. B. Word (Doc, Docx), PDF, HTML, EPUB, Tabellenkalkulation (XLS, XLSX), Präsentation (PPT, PPTX), Bilder und Videos.

GroupDocs.Search ist eine leistungsstarke API für die Volltextsuche, mit der Sie über 70 Dokumentformate in Ihren Anwendungen durchsuchen können. Um eine sofortige Suche in Tausenden von Dokumenten zu ermöglichen, müssen diese dem Index hinzugefügt werden.

Warum GroupDocs.Search als Entwickler verwenden?

  • Zum Durchsuchen von Dokumenten in unterstützten Formaten ist keine zusätzliche Software erforderlich.
  • Eine große Auswahl an Indexierungs- und Suchoptionen wird bereitgestellt, um allen Anforderungen gerecht zu werden.
  • Eine große Auswahl an Suchtypen ist in Text- oder Objektformabfragen verfügbar.
  • Eine hohe Indizierungs- und Suchleistung wird durch einzigartige Algorithmen und Datenstrukturen, Optimierungen und Multithread-Ausführung erreicht.
  • Verschiedene Arten der Visualisierung von Suchergebnissen im Text von Dokumenten werden unterstützt.

Bitte lesen Sie den Artikel About Search Engines, um zu erfahren, welchen Platz GroupDocs.Search API in der Klassifizierung von Suchmaschinen einnimmt.

Installation

GroupDocs.Search für .NET wird auf NuGet gehostet und kann einfach mit dem NuGet Package Manager installiert werden. Alternativ können Sie die DLL der API aus dem Abschnitt Downloads herunterladen.

Office-Dokumente mit C# durchsuchen

Die folgenden Schritte erläutern, wie Sie Wörter oder Ausdrücke in mehreren Dokumenten (Word, Excel, PDF und andere Dokumentformate) suchen.

  • Neuen Index erstellen: Zunächst müssen Sie einen Index erstellen. Ein Index kann im Arbeitsspeicher oder auf der Festplatte erstellt werden. Ein im Speicher erstellter Index kann nach dem Beenden Ihres Programms nicht gespeichert werden. Im Gegensatz dazu kann ein auf der Festplatte erstellter Index in Zukunft geladen werden, um weiterzuarbeiten. Details zum Erstellen eines Index sind im Abschnitt Index erstellen beschrieben.
  • Indexereignisse abonnieren: Nachdem Sie einen Index erstellt haben, müssen Sie dem Index Dokumente für die Indexierung hinzufügen. Das Indizieren von Dokumenten kann aus verschiedenen Gründen erfolgreich oder nicht erfolgreich sein, beispielsweise aufgrund von Lesefehlern von der Festplatte oder dem Vorhandensein eines Kennworts für den Zugriff auf ein Dokument. Um Informationen zu Indizierungsfehlern zu erhalten, können Sie das ErrorOccurred-Ereignis abonnieren. Informationen zum Arbeiten mit Ereignissen finden Sie im Abschnitt Indexereignisse durchsuchen.
  • Dokumente indexieren: Die Indizierung von Dokumenten kann synchron oder asynchron erfolgen. Synchrone Indizierung bedeutet, dass ein Thread, der den Indizierungsprozess gestartet hat, ausgelastet ist, bis der Vorgang abgeschlossen ist. Häufiger ist es jedoch erforderlich, die Indizierung asynchron durchzuführen, mit der Möglichkeit, andere Aufgaben in dem Thread auszuführen, der die Operation gestartet hat. Eine detaillierte Beschreibung aller Aspekte des Indexierungsprozesses finden Sie im Abschnitt Indexierung.
  • Suche durchführen: Wenn Dokumente indiziert sind, ist der Index bereit, Suchanfragen zu verarbeiten. Die folgenden Arten von Suchanfragen werden unterstützt: einfach, unscharf, Groß-/Kleinschreibung beachten, boolesch, Phrasal, facettiert, mit Platzhaltern und andere. Die Beschreibung von Suchanfragen verschiedener Typen wird im Abschnitt Suchen vorgestellt.
  • Suchergebnisse verwenden: Wenn eine Suche abgeschlossen ist, müssen Sie ein Ergebnis irgendwie interpretieren. Das Ergebnis kann durch eine einfache Liste gefundener Dokumente dargestellt werden, oder die gefundenen Wörter und Phrasen können im Text des Dokuments hervorgehoben werden. Weitere Informationen zur Verarbeitung von Suchergebnissen finden Sie unter Suchergebnisse.
string indexFolder = @"/Users/muhammadsohailismail/MyIndex/"; // Specify the path to the index folder
string documentsFolder = @"/Users/muhammadsohailismail/MyDocuments/"; // Specify the path to a folder containing documents to search

// a) Create new index or
// b) Open existing index
Index index = new Index(indexFolder);

// c) Subscribe to index events
index.Events.ErrorOccurred += (sender, args) =>
{
    Console.WriteLine(args.Message); // Writing error messages to the console
};

// d) Add files synchronously
index.Add(documentsFolder); // Synchronous indexing documents from the specified folder

// f) Perform search
string query = "Worthy"; // Specify a search query
SearchResult result = index.Search(query); // Searching in the index

// g) Use search results
// Printing the result
Console.WriteLine("Documents found: " + result.DocumentCount);
Console.WriteLine("Total occurrences found: " + result.OccurrenceCount);
for (int i = 0; i < result.DocumentCount; i++)
{
    FoundDocument document = result.GetFoundDocument(i);
    Console.WriteLine("\\tDocument: " + document.DocumentInfo.FilePath);
    Console.WriteLine("\\tOccurrences: " + document.OccurrenceCount);
}

// Highlight occurrences in text
if (result.DocumentCount > 0)
{
    FoundDocument document = result.GetFoundDocument(0); // Getting the first found document
    string path = @"/Users/muhammadsohailismail/Output/Highlighted.html";
    OutputAdapter outputAdapter = new FileOutputAdapter(path); // Creating the output adapter to a file
    HtmlHighlighter highlighter = new HtmlHighlighter(outputAdapter); // Creating the highlighter object
    index.Highlight(document, highlighter); // Generating output HTML formatted document with highlighted search results

    Console.WriteLine();
    Console.WriteLine("Generated HTML file can be opened with Internet browser.");
    Console.WriteLine("The file can be found by the following path:");
    Console.WriteLine(Path.GetFullPath(path));
}

Der obige Code generiert die folgende Ausgabe und HTML-Datei.

Suche in Dokumentenfeldern mit C#

Facettensuche ist das Filtern von Suchergebnissen, indem gültige Dokumentfeldnamen für die Suche festgelegt werden. Die facettierte Suche ermöglicht es Ihnen, nur in bestimmten Feldern von Dokumenten zu suchen, beispielsweise nur im Inhaltsfeld oder im Dateinamensfeld. Nachfolgend wird ein einfaches facettiertes Suchbeispiel mit Abfragen in Text- und Objektform vorgestellt.

string indexFolder = @"c:\\MyIndex\\";
string documentsFolder = @"c:\\MyDocuments\\";
 
// Creating an index in the specified folder
Index index = new Index(indexFolder);
 
// Indexing documents from the specified folder
index.Add(documentsFolder);
 
// Search in the content field with text query
SearchResult result1 = index.Search("content: Einstein");
 
// Search in the content field with object query
SearchQuery wordQuery = SearchQuery.CreateWordQuery("Einstein");
SearchQuery fieldQuery = SearchQuery.CreateFieldQuery(CommonFieldNames.Content, wordQuery);
SearchResult result2 = index.Search(fieldQuery);

Formatspezifische Felder verwenden

Für jedes Dokumentformat gibt es Standardfelder, die in Dokumenten dieses Typs vorhanden sein können. Die Bibliothek stellt die folgenden Klassen bereit, die Konstanten mit den Namen von Standarddokumentfeldern enthalten: EpubFieldNames, FictionBookFieldNames, MailFieldNames, PresentationFieldNames, SpreadsheetFieldNames , WörterFeldnamen.

Es gibt auch Felder, die in Dokumenten jeglicher Art vorhanden sein können. Die Namen solcher Felder werden in der Klasse CommonFieldNames dargestellt.

Ein Beispiel für die Verwendung von Standardfeldnamen von Dokumenten ist im folgenden Beispiel dargestellt.

string indexFolder = @"c:\\MyIndex\\";
string documentsFolder = @"c:\\MyDocuments\\";
 
// Creating an index in the specified folder
Index index = new Index(indexFolder);
 
// Indexing documents from the specified folder
index.Add(documentsFolder);
 
// Search in the content field with text query
string query1 = WordsFieldNames.Company + ": Dycum";
SearchResult result1 = index.Search(query1);
 
// Search in the content field with object query
SearchQuery wordQuery = SearchQuery.CreateWordQuery("Dycum");
SearchQuery fieldQuery = SearchQuery.CreateFieldQuery(WordsFieldNames.Company, wordQuery);
SearchResult result2 = index.Search(fieldQuery);

Detaillierte Informationen zur facettierten Suche finden Sie auf der Seite Facettensuche.

Fazit

In diesem Artikel wurde erläutert, wie Dokumente (DOCX-, PDF-, Excel-, Textdateien) nach bestimmten Informationen in C# durchsucht werden. Außerdem wurde erklärt, wie man in den Dokumentenfeldern sucht. GroupDocs.Search enthält mehrere andere Funktionen, bitte lesen Sie die Dokumentation, um mehr darüber zu erfahren.