Pełnotekstowe wyszukiwanie dokumentów

Często potrzebujemy interfejsu API wyszukiwania pełnotekstowego, który umożliwia naszym aplikacjom przeszukiwanie dokumentów pod kątem określonych informacji określonych jako tekstowe zapytanie wyszukiwania. Dokumenty mogą mieć dowolny format, taki jak Word (Doc, Docx), PDF, HTML, EPUB, arkusz kalkulacyjny (XLS, XLSX), prezentacja (PPT, PPTX), obrazy i filmy.

GroupDocs.Search to potężny interfejs API wyszukiwania pełnotekstowego, który umożliwia przeszukiwanie ponad 70 formatów dokumentów w Twoich aplikacjach. Aby umożliwić natychmiastowe przeszukiwanie tysięcy dokumentów, należy je dodać do indeksu.

Dlaczego warto używać GroupDocs.Search jako programista?

  • Do wyszukiwania dokumentów w obsługiwanych formatach nie jest wymagane żadne dodatkowe oprogramowanie.
  • Dostępna jest szeroka gama opcji indeksowania i wyszukiwania, aby sprostać wszelkim wymaganiom.
  • Dostępny jest szeroki wybór typów wyszukiwania w zapytaniach tekstowych lub obiektowych.
  • Wysoką wydajność indeksowania i wyszukiwania uzyskuje się dzięki unikalnym algorytmom i strukturom danych, optymalizacjom i wielowątkowemu wykonywaniu.
  • Obsługiwane są różne sposoby wizualizacji wyników wyszukiwania w tekście dokumentów.

Sprawdź artykuł O wyszukiwarkach, aby dowiedzieć się, jakie miejsce zajmuje GroupDocs.Search API w klasyfikacji wyszukiwarek.

Instalacja

GroupDocs.Search for .NET jest hostowany na NuGet i można go łatwo zainstalować za pomocą Menedżera pakietów NuGet. Alternatywnie możesz pobrać bibliotekę DLL API z sekcji Downloads.

Przeszukuj dokumenty pakietu Office za pomocą języka C#

Poniższe kroki wyjaśniają, jak wyszukiwać słowa lub wyrażenia w wielu dokumentach (Word, Excel, PDF i innych formatach dokumentów).

  • Utwórz nowy indeks: Przede wszystkim musisz utworzyć indeks. Indeks można utworzyć w pamięci lub na dysku. Indeks utworzony w pamięci nie może zostać zapisany po wyjściu z programu. Natomiast indeks utworzony na dysku może zostać załadowany w przyszłości, aby kontynuować pracę. Szczegóły dotyczące tworzenia indeksu zostały opisane w rozdziale Tworzenie indeksu.
  • Subskrybuj zdarzenia indeksu: po utworzeniu indeksu musisz dodać do niego dokumenty w celu indeksowania. Indeksowanie dokumentów może zakończyć się sukcesem lub niepowodzeniem z różnych powodów, na przykład z powodu błędów odczytu z dysku lub obecności hasła dostępu do dokumentu. Aby otrzymywać informacje o błędach indeksowania, możesz zasubskrybować zdarzenie ErrorOccurred. Aby pracować ze zdarzeniami, zobacz sekcję Wyszukiwanie zdarzeń w indeksie.
  • Indeksuj dokumenty: Indeksowanie dokumentów może odbywać się synchronicznie lub asynchronicznie. Indeksowanie synchroniczne oznacza, że wątek, który rozpoczął proces indeksowania, będzie zajęty do momentu zakończenia operacji. Częściej jednak konieczne jest wykonanie indeksowania asynchronicznie, z możliwością wykonywania innych zadań w wątku, który uruchomił operację. Szczegółowy opis wszystkich aspektów procesu indeksowania znajduje się w rozdziale Indeksowanie.
  • Wykonaj wyszukiwanie: gdy dokumenty są indeksowane, indeks jest gotowy do obsługi zapytań wyszukiwania. Obsługiwane są następujące typy zapytań wyszukiwania: proste, rozmyte, uwzględniające wielkość liter, boolowskie, frazowe, fasetowe, z symbolami wieloznacznymi i inne. Opis zapytań wyszukiwawczych różnego typu znajduje się w rozdziale Wyszukiwanie.
  • Użyj wyników wyszukiwania: Po zakończeniu wyszukiwania musisz w jakiś sposób zinterpretować wynik. Wynik może być reprezentowany przez prostą listę znalezionych dokumentów lub znalezione słowa i frazy mogą być wyróżnione w tekście dokumentu. Aby uzyskać więcej informacji na temat przetwarzania wyników wyszukiwania, zobacz Wyniki wyszukiwania.
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));
}

Powyższy kod generuje następujące dane wyjściowe i plik HTML.

Wyszukiwanie w polach dokumentów za pomocą języka C#

Wyszukiwanie aspektowe polega na filtrowaniu wyników wyszukiwania przez ustawianie prawidłowych nazw pól dokumentu do wyszukiwania. Wyszukiwanie aspektowe umożliwia wyszukiwanie tylko w określonych polach dokumentów, na przykład tylko w polu zawartości lub w polu nazwy pliku. Poniżej przedstawiono prosty przykład wyszukiwania aspektowego z zapytaniami w formie tekstowej i obiektowej.

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

Korzystanie z pól specyficznych dla formatu

Dla każdego formatu dokumentu istnieją standardowe pola, które mogą występować w dokumentach tego typu. Biblioteka udostępnia następujące klasy zawierające stałe z nazwami standardowych pól dokumentu: EpubFieldNames, FictionBookFieldNames, MailFieldNames, PresentationFieldNames, SpreadsheetFieldNames , WordsFieldNames.

Istnieją również pola, które mogą występować w dokumentach dowolnego typu. Nazwy takich pól są reprezentowane w klasie CommonFieldNames.

Przykład wykorzystania standardowych nazw pól dokumentów przedstawiono w poniższym przykładzie.

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

Szczegółowe informacje na temat wyszukiwania aspektowego znajdują się na stronie Wyszukiwanie aspektowe.

Wniosek

W tym artykule wyjaśniono, jak wyszukiwać określone informacje w dokumentach (DOCX, PDF, Excel, pliki tekstowe) w języku C#. Wyjaśniono również, jak wyszukiwać w polach dokumentów. GroupDocs.Search zawiera kilka innych funkcji, sprawdź dokumentację, aby dowiedzieć się więcej na ten temat.