Нам часто потрібен API повнотекстового пошуку, який дозволяє нашим програмам шукати в документах певну інформацію, указану як текстовий пошуковий запит. Документи можуть мати будь-який формат, наприклад Word (Doc, Docx), PDF, HTML, EPUB, електронні таблиці (XLS, XLSX), презентації (PPT, PPTX), зображення та відео.
GroupDocs.Search – це потужний API для повнотекстового пошуку, який дозволяє здійснювати пошук у понад 70 форматах документів у ваших програмах. Щоб зробити можливим миттєвий пошук у тисячах документів, їх потрібно додати до індексу.
Навіщо використовувати GroupDocs.Search як розробника?
- Для пошуку документів підтримуваних форматів не потрібне додаткове програмне забезпечення.
- Для задоволення будь-яких вимог надається велика різноманітність параметрів індексації та пошуку.
- Широкий вибір типів пошуку доступний у текстових або об’єктних запитах.
- Висока продуктивність індексування та пошуку досягається унікальними алгоритмами та структурами даних, оптимізацією та багатопоточним виконанням.
- Підтримуються різні способи візуалізації результатів пошуку в тексті документів.
Перегляньте статтю Про пошукові системи, щоб дізнатися, яке місце GroupDocs.Search API займає в класифікації пошукових систем.
монтаж
GroupDocs.Search for .NET розміщено на NuGet і його можна легко встановити за допомогою диспетчера пакетів NuGet. Крім того, ви можете завантажити DLL API з розділу Завантаження.
Пошук в документах Office за допомогою C#
Наступні кроки пояснюють, як шукати слова чи фрази в кількох документах (Word, Excel, PDF та інші формати документів).
- Створіть новий індекс. Перш за все, вам потрібно створити індекс. Індекс можна створити в пам’яті або на диску. Індекс, створений у пам’яті, неможливо зберегти після виходу з програми. Навпаки, індекс, створений на диску, може бути завантажений у майбутньому для продовження роботи. Докладно про створення індексу описано в розділі Створення індексу.
- Підписка на події індексу: після створення індексу вам потрібно додати документи до індексу для індексації. Індексація документів може бути успішною або неуспішною з різних причин, наприклад, через помилки читання з диска або наявності пароля доступу до документа. Щоб отримувати інформацію про помилки індексації, ви можете підписатися на подію ErrorOccurred. Для роботи з подіями дивіться розділ Пошук подій індексу.
- Індекс документів: індексування документів може виконуватися синхронно або асинхронно. Синхронне індексування означає, що потік, який розпочав процес індексування, буде зайнятий до завершення операції. Однак частіше доводиться виконувати індексування асинхронно, з можливістю виконання інших завдань у потоці, який запустив операцію. Детальний опис усіх аспектів процесу індексування наведено в розділі Індексування.
- Виконати пошук: коли документи проіндексовано, індекс готовий до обробки пошукових запитів. Підтримуються наступні типи пошукових запитів: простий, нечіткий, з урахуванням регістру, логічний, фразовий, фасетний, із символами підстановки та інші. Опис пошукових запитів різних типів представлено в розділі Пошук.
- Використовуйте результати пошуку: коли пошук завершено, вам потрібно якось інтерпретувати результат. Результат може бути представлений простим списком знайдених документів або знайдені слова та фрази можуть бути виділені в тексті документа. Щоб отримати додаткові відомості про обробку результатів пошуку, перегляньте Результати пошуку.
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));
}
Наведений вище код генерує такий вихід і HTML-файл.
Пошук у полях документів за допомогою C#
Фасетний пошук — це фільтрація результатів пошуку шляхом встановлення дійсних імен полів документа для пошуку. Фасетний пошук дозволяє шукати лише в певних полях документів, наприклад, лише в полі вмісту або в полі імені файлу. Нижче наведено простий приклад фасетного пошуку із запитами в текстовій та об’єктній формі.
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);
Використання спеціальних полів формату
Для кожного формату документа існують стандартні поля, які можуть бути присутніми в документах цього типу. Бібліотека надає такі класи, що містять константи з іменами стандартних полів документа: EpubFieldNames, FictionBookFieldNames, MailFieldNames, PresentationFieldNames, SpreadsheetFieldNames , Назви полів слів.
Також існують поля, які можуть бути присутніми в документах будь-якого типу. Імена таких полів представлені в класі CommonFieldNames.
Приклад використання стандартних імен полів документів наведено в наступному прикладі.
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);
Детальна інформація про фасетний пошук представлена на сторінці Фасетний пошук.
Висновок
У цій статті пояснюється, як шукати в документах (DOCX, PDF, Excel, текстові файли) певну інформацію в C#. Також було пояснено, як шукати в полях документів. GroupDocs.Search містить кілька інших функцій, перегляньте документацію, щоб дізнатися більше про це.