Zoeken in volledige tekst van documenten

We hebben vaak een full-text zoek-API nodig waarmee onze toepassingen documenten kunnen doorzoeken op bepaalde informatie die is gespecificeerd als een tekstuele zoekopdracht. De documenten kunnen elk formaat hebben, zoals Word (Doc, Docx), PDF, HTML, EPUB, Spreadsheet (XLS, XLSX), Presentatie (PPT, PPTX), afbeeldingen en video’s.

GroupDocs.Search is een krachtige full-text zoek-API waarmee u meer dan 70 documentindelingen in uw toepassingen kunt doorzoeken. Om duizenden documenten direct te kunnen doorzoeken, moeten ze aan de index worden toegevoegd.

Waarom GroupDocs.Search als ontwikkelaar gebruiken?

  • Er is geen extra software nodig om documenten van ondersteunde formaten te doorzoeken.
  • Er wordt een grote verscheidenheid aan indexerings- en zoekopties geboden om aan alle vereisten te voldoen.
  • Een brede selectie van zoektypes is beschikbaar in tekst- of objectformulierquery’s.
  • Hoge indexering en zoekprestaties worden bereikt door unieke algoritmen en datastructuren, optimalisaties en multi-threaded uitvoering.
  • Er worden verschillende manieren ondersteund om zoekresultaten in de tekst van documenten te visualiseren.

Raadpleeg het artikel Over zoekmachines om te weten welke plaats GroupDocs.Search API inneemt in de classificatie van zoekmachines.

Installatie

GroupDocs.Search for .NET wordt gehost op NuGet en kan eenvoudig worden geïnstalleerd met NuGet Package Manager. U kunt ook de DLL van de API downloaden via de sectie Downloads.

Doorzoek Office-documenten met C#

In de volgende stappen wordt uitgelegd hoe u woorden of zinsdelen kunt zoeken in meerdere documenten (Word, Excel, PDF en andere documentindelingen).

  • Een nieuwe index maken: Allereerst moet u een index maken. Een index kan in het geheugen of op schijf worden gemaakt. Een index die in het geheugen is gemaakt, kan niet worden opgeslagen nadat u uw programma hebt afgesloten. Een index die op schijf is gemaakt, kan in de toekomst daarentegen worden geladen om verder te werken. Details over het maken van een index worden beschreven in de sectie Een index maken.
  • Abonneren op indexgebeurtenissen: nadat u een index hebt gemaakt, moet u documenten aan de index toevoegen voor indexering. Het indexeren van documenten kan om verschillende redenen succesvol of niet succesvol zijn, bijvoorbeeld vanwege leesfouten van de schijf of de aanwezigheid van een wachtwoord om toegang te krijgen tot een document. Om informatie over indexeringsfouten te ontvangen, kunt u zich abonneren op de ErrorOccurred-gebeurtenis. Om met gebeurtenissen te werken, zie de sectie Zoek indexgebeurtenissen.
  • Documenten indexeren: het indexeren van documenten kan synchroon of asynchroon worden uitgevoerd. Synchrone indexering betekent dat een thread die het indexeringsproces heeft gestart, bezig zal zijn totdat de bewerking is voltooid. Vaker is het echter nodig om asynchroon indexering uit te voeren, met de mogelijkheid om andere taken uit te voeren in de thread die de bewerking heeft gestart. Een gedetailleerde beschrijving van alle aspecten van het indexeringsproces vindt u in sectie Indexering.
  • Zoekopdracht uitvoeren: wanneer documenten zijn geïndexeerd, is de index klaar om zoekopdrachten te verwerken. De volgende typen zoekopdrachten worden ondersteund: eenvoudig, fuzzy, hoofdlettergevoelig, booleaans, woordgroepen, facetten, met jokertekens en andere. Beschrijving van zoekopdrachten van verschillende typen wordt gepresenteerd in de sectie Zoeken.
  • Zoekresultaten gebruiken: wanneer een zoekopdracht is voltooid, moet u een resultaat op de een of andere manier interpreteren. Het resultaat kan worden weergegeven door een eenvoudige lijst met gevonden documenten, of de gevonden woorden en zinnen kunnen worden gemarkeerd in de tekst van het document. Zie Zoekresultaten voor meer informatie over het verwerken van zoekresultaten.
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));
}

De bovenstaande code genereert de volgende uitvoer en HTML-bestand.

Zoeken in documentvelden met C#

Gefacetteerd zoeken is het filteren van zoekresultaten door geldige documentveldnamen in te stellen om te zoeken. Met facetzoeken kunt u alleen in bepaalde velden van documenten zoeken, bijvoorbeeld alleen in het inhoudsveld of in het bestandsnaamveld. Hieronder wordt een eenvoudig zoekvoorbeeld met facetten weergegeven met zoekopdrachten in tekst- en objectvorm.

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);

Formaatspecifieke velden gebruiken

Voor elk documentformaat zijn er standaardvelden die aanwezig kunnen zijn in documenten van dit type. De bibliotheek biedt de volgende klassen met constanten met de namen van standaard documentvelden: EpubFieldNames, FictionBookFieldNames, MailFieldNames, PresentationFieldNames, SpreadsheetFieldNames , WoordenVeldnamen.

Er zijn ook velden die aanwezig kunnen zijn in documenten van elk type. De namen van dergelijke velden worden weergegeven in de klasse CommonFieldNames.

In het volgende voorbeeld wordt een voorbeeld gegeven van het gebruik van standaardveldnamen van documenten.

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);

Gedetailleerde informatie over facetzoeken vindt u op de pagina Faceted search.

Conclusie

In dit artikel is uitgelegd hoe u in documenten (DOCX, PDF, Excel, tekstbestanden) kunt zoeken naar bepaalde informatie in C#. Ook werd uitgelegd hoe te zoeken in de velden van documenten. GroupDocs.Search bevat verschillende andere functies. Raadpleeg de documentatie voor meer informatie.