Fulltextové vyhledávání dokumentů

Často potřebujeme rozhraní API pro fulltextové vyhledávání, které umožňuje našim aplikacím vyhledávat v dokumentech konkrétní informace zadané jako textový vyhledávací dotaz. Dokumenty mohou být libovolného formátu, například Word (Doc, Docx), PDF, HTML, EPUB, tabulkový procesor (XLS, XLSX), prezentace (PPT, PPTX), obrázky a videa.

GroupDocs.Search je výkonné rozhraní API pro fulltextové vyhledávání, které vám umožňuje prohledávat více než 70 formátů dokumentů ve vašich aplikacích. Aby bylo možné okamžitě vyhledávat v tisících dokumentů, musí být přidány do indexu.

Proč používat GroupDocs.Search jako vývojář?

  • K prohledávání dokumentů podporovaných formátů není potřeba žádný další software.
  • Pro splnění jakýchkoli požadavků je k dispozici široká škála možností indexování a vyhledávání.
  • V textových nebo objektových dotazech je k dispozici široký výběr typů vyhledávání.
  • Vysoký výkon indexování a vyhledávání je dosahován unikátními algoritmy a datovými strukturami, optimalizacemi a vícevláknovým prováděním.
  • Podporovány jsou různé způsoby vizualizace výsledků vyhledávání v textu dokumentů.

Přečtěte si prosím článek O vyhledávačích, abyste věděli, jaké místo GroupDocs.Search API zaujímá v klasifikaci vyhledávačů.

Instalace

GroupDocs.Search for .NET je hostován na NuGet a lze jej snadno nainstalovat pomocí Správce balíčků NuGet. Alternativně si můžete stáhnout DLL API ze sekce Stahování.

Prohledávejte dokumenty Office pomocí C#

Následující kroky vysvětlují, jak vyhledávat slova nebo fráze ve více dokumentech (Word, Excel, PDF a další formáty dokumentů).

  • Vytvoření nového indexu: Nejprve musíte vytvořit index. Index lze vytvořit v paměti nebo na disku. Index vytvořený v paměti nelze po ukončení programu uložit. Naproti tomu index vytvořený na disku může být v budoucnu načten, aby mohl pokračovat v práci. Podrobnosti o vytváření indexu jsou popsány v části Vytvoření indexu.
  • Přihlásit se k odběru událostí indexu: Po vytvoření indexu musíte do indexu přidat dokumenty pro indexování. Indexování dokumentů může být úspěšné nebo neúspěšné z různých důvodů, například kvůli chybám při čtení z disku nebo přítomnosti hesla pro přístup k dokumentu. Chcete-li dostávat informace o chybách indexování, můžete se přihlásit k odběru události ErrorOccurred. Pro práci s událostmi se podívejte do sekce Hledat události indexu.
  • Indexovat dokumenty: Indexování dokumentů lze provádět synchronně nebo asynchronně. Synchronní indexování znamená, že vlákno, které zahájilo proces indexování, bude zaneprázdněné, dokud nebude operace dokončena. Častěji je však nutné provádět indexování asynchronně, s možností provádět další úlohy ve vláknu, které operaci spustilo. Podrobný popis všech aspektů procesu indexování je uveden v části Indexování.
  • Provést vyhledávání: Když jsou dokumenty indexovány, index je připraven zpracovávat vyhledávací dotazy. Jsou podporovány následující typy vyhledávacích dotazů: jednoduché, nejasné, velká a malá písmena, booleovské, frázové, fasetové, se zástupnými znaky a další. Popis vyhledávacích dotazů různých typů je uveden v sekci Vyhledávání.
  • Použít výsledky vyhledávání: Po dokončení vyhledávání je třeba nějakým způsobem interpretovat výsledek. Výsledek může být reprezentován jednoduchým seznamem nalezených dokumentů, nebo mohou být nalezená slova a fráze zvýrazněna v textu dokumentu. Další informace o zpracování výsledků vyhledávání naleznete v části Výsledky vyhledávání.
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));
}

Výše uvedený kód generuje následující výstup a soubor HTML.

Vyhledávání v polích dokumentů pomocí C#

Fasetované vyhledávání je filtrování výsledků vyhledávání nastavením platných názvů polí dokumentu pro vyhledávání. Fasetové vyhledávání umožňuje vyhledávat pouze v určitých polích dokumentů, například pouze v poli obsahu nebo v poli názvu souboru. Níže je uveden jednoduchý fasetovaný příklad vyhledávání s dotazy v textové a objektové podobě.

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

Použití polí specifických pro formát

Pro každý formát dokumentu existují standardní pole, která mohou být v dokumentech tohoto typu přítomna. Knihovna poskytuje následující třídy obsahující konstanty s názvy standardních polí dokumentu: EpubFieldNames, FictionBookFieldNames, MailFieldNames, PresentationFieldNames, SpreadsheetFieldNames , Názvy slovních polí.

Existují také pole, která mohou být přítomna v dokumentech jakéhokoli typu. Názvy takových polí jsou zastoupeny ve třídě CommonFieldNames.

Příklad použití standardních názvů polí dokumentů je uveden v následujícím příkladu.

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

Podrobné informace o fasetovém vyhledávání jsou uvedeny na stránce Faceted search.

Závěr

Tento článek vysvětluje, jak vyhledávat konkrétní informace v C# v dokumentech (DOCX, PDF, Excel, textové soubory). Bylo také vysvětleno, jak vyhledávat v polích dokumentů. GroupDocs.Search obsahuje několik dalších funkcí, podívejte se prosím do dokumentace, kde se o tom dozvíte více.