Перш ніж перейти до деталей, давайте ознайомимося з технікою повнотекстового пошуку. Повнотекстовий пошук — це, по суті, більш просунутий спосіб пошуку тексту/запиту в наборі документів. Цей підхід швидко знаходить усі екземпляри терміна та працює за допомогою текстових індексів. У цій статті ми дізнаємося, як програмно шукати повний текст у документах за допомогою C#.
Після цього ви можете застосувати різні методи пошуку для пошуку тексту в документах текстових редакторів, електронних таблицях, презентаціях, файлах HTML, електронних книгах PDF, повідомленнях електронної пошти, архівах ZIP та багатьох інших файлах.
Одним із прикладів реалізації повнотекстового пошуку є текстові процесори та текстові редактори. Це допоможе вам знайти фразу чи слово будь-де в документі.

Нижче описано наступні теми:
- .NET API для повнотекстового пошуку
- Повнотекстовий пошук
- Виконайте пошук у C#
- Виділіть результати пошуку
.NET API для текстового пошуку
GroupDocs.Search for .NET — це API внутрішнього пошуку, який забезпечує повнотекстовий пошук і може бути інтегрований у будь-яку програму .NET без будь-яких сторонніх інструментів чи програмного забезпечення. Це дозволяє пошук у багатьох форматах документів у ваших програмах.
Ви можете завантажити DLL або інсталятор MSI із розділу завантажень або встановити API у своїй програмі .NET за допомогою NuGet.
PM> Install-Package GroupDocs.Search
Повнотекстовий пошук за допомогою C#
Існує два основні кроки для виконання або реалізації повнотекстового пошуку.
- Індексація
- Виконайте пошук
Індексація
Щоб зробити можливим миттєвий пошук у тисячах документів з однаковими або різними форматами файлів, вам потрібно створити індекс і додати ці документи до нього.
Що таке індекс?
Покажчик містить сканований текст усіх документів. Тому, коли ви збираєтеся виконати пошукову операцію (пошук за певним запитом), посилається лише на індекс, а не на текст вихідних документів.
Створення індексу
Індекс можна створити в пам’яті або на диску. Індекс, створений у пам’яті, неможливо зберегти після виходу з програми. Навпаки, індекс, створений на диску, може бути завантажений у майбутньому для продовження роботи. У наступному прикладі показано, як створити індекс на диску.
Index index = new Index("indexPath/FolderName/");
Коли документи проіндексовано, індекс готовий до обробки пошукових запитів. Нижче наведено деякі методи пошуку, які можна виконати за допомогою GroupDocs.Search for .NET:
- Пошук з урахуванням регістру
- Пошук за регулярним виразом
- Пошук по фразі
- Фасетний пошук
- Пошук синонімів
- Пошук по шаблону
Виконайте пошук у C#
Починаючи з варіанта використання. Якщо у нас є кілька документів (Word, PDF, Excel і HTML), і ми хочемо виконати над ними певний пошуковий запит (пошуковий термін «відео»).
Нижче наведено кроки для виконання текстового пошуку в кількох документах у папці:
- Виберіть папку вихідних документів і папку покажчика.
- Підготуйте рядок запиту.
- Створіть Індекс за допомогою папки індексу.
- Додайте папку вихідних документів до індексу.
- Виконайте пошук за допомогою класу методу Пошук Індекс.
- Результати огляду та пошуку для властивостей кожного документа.
Наступний вихідний код виконує текстовий пошук за допомогою C# у всіх документах наданої папки.
// Текст запиту пошуку в усіх документах наданої папки на C#
string indexFolder = @"indexPath/GroupDocs/index/";
string documentsFolder = @"documentPath/GroupDocs/source/";
string query = "video";
// Створення індексу у вказаній папці та додавання папки документів до Індексу
Index index = new Index(indexFolder);
index.Add(documentsFolder);
// Пошук в індексі
SearchResult result = index.Search(query);
Console.WriteLine("Documents found: " + result.DocumentCount);
// Перегляньте кожен документ результату пошуку
foreach (FoundDocument document in result)
{
Console.WriteLine("Document Path : " + document.DocumentInfo.FilePath);
Console.WriteLine("Occurance : " + document.OccurrenceCount);
}
Ми отримаємо шлях до документа та кількість пошукових термінів у всіх документах, доступних у папці документів. Ось скріншот для візуалізації.

Виділення результатів пошуку тексту в C#
Давайте тепер виконаємо той самий текстовий пошук, але цього разу ми виділимо всі випадки, які відповідають запиту.
У наступних кроках показано, як виділити результати текстового пошуку:
- Підготуйте рядок запиту.
- Створіть Індекс, використовуючи шлях до папки індексу.
- Додайте папку вихідних документів до індексу.
- Виконайте пошук у папці документів за допомогою методу Пошук.
- Під час перегляду результатів пошуку створіть Highlighter.
- Використовуйте метод Highlight класу Index, щоб виділити результати пошуку.
Наведений нижче код генерує вивід HTML із виділеними результатами пошуку за допомогою C#.
string indexFolder = @"indexPath/GroupDocs/index/";
string documentFolder = @"documentPath/GroupDocs/source/";
string query = "draw";
// Створіть індекс у вказаній папці та додайте папку документів до Індексу
Index index = new Index(indexFolder);
index.Add(documentFolder);
// Пошук за словом запиту
SearchResult result = index.Search(query);
// Виділіть усі випадки в тексті
for (int i = 0; i < result.DocumentCount; i++)
{
FoundDocument document = result.GetFoundDocument(i);
string path = indexFolder + "Highlighted-"+ i +".html";
OutputAdapter outputAdapter = new FileOutputAdapter(path);
Highlighter highlighter = new HtmlHighlighter(outputAdapter);
index.Highlight(document, highlighter);
}
На виході ми отримаємо кілька файлів HTML. У кожному файлі відображатиметься вміст іншого документа (наприклад, excel.xlsx, source.docx, target.docx) із виділеним пошуковим терміном/словом. Нижче наведено виділений HTML-вихідний файл DOCX.

Отримайте безкоштовну ліцензію API
Ви можете отримати безкоштовну тимчасову ліцензію, щоб використовувати API без оціночних обмежень.
Висновок
У цій статті ми навчилися шукати текст у кількох документах папки за допомогою C#. Далі ми обговорили, як програмно виділити текст результатів пошуку у форматі HTML.
Ви можете дізнатися більше про API за допомогою документації. Багато інших прикладів доступно на GitHub. Якщо у вас виникли запитання, зв’яжіться з нами через форум.