GroupDocs.Search для .NET 26.10 тепер доступний. Це великий випуск: формат індексу був перепроектований, тому індекси займають менше місця на диску, потребують вдвічі менше ОЗП і відкриваються в 2–4 рази швидше. Пошук, видалення, оптимізація та пошук зображень прискорюються в декілька‑сот разів, пошуки більше не чекають індексування, а дані індексу захищені контрольними сумами та атомарними оновленнями.
Існуючі індекси, створені версіями 22.7–26.8, конвертуються у новий формат без повторного індексування. У випуску 22 зміни: 4 нові функції, 15 покращень і 3 виправлення.
Основні показники продуктивності
Більшість вигод зростає зі розміром індексу та кількістю його сегментів.
| Що | Покращення у 26.10 |
|---|---|
| Оперативна пам’ять, необхідна завантаженому індексу | в 2 рази менше |
| Відкриття індексу | в 2–4 рази швидше |
| Розмір індексу на диску | Зростає пропорційно індексованим даним; чим більший індекс, тим більше економії |
| Пошук слова у великих індексах | До 2 разів швидше; рідкісні слова в 10–40 разів швидше |
| Нечіткий пошук у великих індексах | в 2,5–5 разів швидше |
| Пошук за шаблоном у великих індексах | в 2,5–3 рази швидше |
| Пошук за шаблоном, регулярний вираз, числовий діапазон та нечіткий пошук за частинами | в 7–150 разів швидше |
| Пошук за діапазоном дат | в 2–27 разів швидше |
| Видалення документів | Сотні разів швидше, в 4 рази менше пам’яті, без додаткового простору на диску |
| Оптимізація індексу | в 4 рази швидше, в 4 рази менше пам’яті |
| Пікова ОЗП під час індексування | в 2 рази менше |
| Отримання збереженого тексту документа | До 15 разів швидше |
| Дані пошуку зображень | в 2,9 рази менше пам’яті, завантажуються в 6,6 рази швидше, зберігаються в 100 разів швидше; зворотний пошук зображень до 1,8 рази швидше |
| Пошук під час модифікації індексу | Більше не блокується |
| Надійність індексу | Контрольні суми та атомарні зміни; перервані операції завершуються або відкасовуються |
| Потоки пошуку | Всі ядра процесора за замовчуванням; можна змінити в будь‑який момент |
Що нового у цьому випуску
| Ключ | Опис | Категорія |
|---|---|---|
| SEARCHNET-3665 | Реалізовано можливість змінювати кількість потоків пошуку в будь‑який момент | Функція |
| SEARCHNET-3666 | Реалізовано опцію заміни непарних сурогатних символів | Функція |
| SEARCHNET-3667 | Реалізовано опцію пропуску термінів, що складаються лише зі змішаних символів | Функція |
| SEARCHNET-3668 | Реалізовано оновлення версії індексу до нового формату без повторного індексування документів | Функція |
| SEARCHNET-3669 | Реалізовано оптимізацію використання дискового простору індексом | Покращення |
| SEARCHNET-3670 | Реалізовано оптимізацію використання ОЗП завантаженого індексу | Покращення |
| SEARCHNET-3671 | Реалізовано оптимізацію швидкості завантаження індексу | Покращення |
| SEARCHNET-3672 | Реалізовано оптимізацію швидкості пошуку у великих індексах | Покращення |
| SEARCHNET-3673 | Реалізовано оптимізацію нечіткого пошуку | Покращення |
| SEARCHNET-3674 | Реалізовано оптимізацію пошуку за шаблоном | Покращення |
| SEARCHNET-3675 | Реалізовано оптимізацію видалення та оновлення документів | Покращення |
| SEARCHNET-3676 | Реалізовано оптимізацію операції оптимізації індексу | Покращення |
| SEARCHNET-3677 | Дозволено пошук під час модифікації індексу | Покращення |
| SEARCHNET-3678 | Покращено надійність індексу | Покращення |
| SEARCHNET-3679 | Реалізовано оптимізацію використання пам’яті під час індексування | Покращення |
| SEARCHNET-3680 | Реалізовано оптимізацію отримання тексту документа | Покращення |
| SEARCHNET-3681 | Реалізовано оптимізацію пошуку зображень | Покращення |
| SEARCHNET-3682 | Реалізовано уніфіковану обробку регістру букв на всіх платформах | Покращення |
| SEARCHNET-3688 | Реалізовано оптимізацію пошуку за частинами | Покращення |
| SEARCHNET-3683 | Виправлено типову кількість потоків пошуку | Виправлення |
| SEARCHNET-3684 | Запобігання несумісному індексуванню після зміни словників термінів | Виправлення |
| SEARCHNET-3685 | Запобігання злиттю індексів, які обробляють текст по‑різному | Виправлення |
Основні функції
Зберігання індексу та надійність
- Тепер розмір індексу зростає пропорційно індексованим даним, тому великі індекси з багатьма сегментами економлять найбільше простору.
- Завантажений індекс потребує вдвічі менше ОЗП, а відкриття індексу в 2–4 рази швидше.
- Дані індексу захищені контрольними сумами, і всі зміни застосовуються атомарно. Якщо операція переривається помилкою, відключенням живлення або завершенням процесу, індекс залишається у попередньому узгодженому стані.
Пошук
- Читаються лише сегменти, що містять терміни запиту, що прискорює пошук слів, нечіткий пошук, пошук за шаблоном та пошук за частинами.
- За замовчуванням пошук використовує всі ядра процесора, а кількість потоків можна змінити в будь‑який момент через
IndexSettings.SearchThreads. - Пошук та операції, що змінюють індекс (індексування, оновлення, видалення, злиття, оптимізація) більше не блокують один одного. Кожен пошук працює з узгодженим знімком індексу.
Індексування та обслуговування
- Видалення документів більше не переписує індекс: документи негайно виключаються з пошуку і фізично видаляються під час оптимізації.
- Оптимізація індексу в 4 рази швидша і споживає в 4 рази менше пам’яті; дуже великі індекси оптимізуються у кілька сегментів обмеженого розміру.
- Індексування споживає приблизно вдвічі менше пікової ОЗП.
Обробка тексту
- Регістр символів обробляється ідентично у .NET Framework та .NET, тому результати пошуку не залежать від платформи.
- Непарні сурогатні символи замінюються на U+FFFD замість їх видалення, а терміни, що складаються лише зі змішаних символів, більше не індексуються.
Зміни у публічному API
Додано два властивості до класу GroupDocs.Search.IndexSettings:
Boolean ReplaceUnpairedSurrogates– замінює непарні UTF-16 сурогатні символи на символ заміни Unicode (U+FFFD). Увімкнено за замовчуванням.Boolean SkipBlendedOnlyTerms– виключає з індексування терміни, що складаються лише зі змішаних символів. Увімкнено за замовчуванням.
Обидві налаштування фіксуються під час створення індексу.
Приклад коду
Наступний приклад оновлює індекс, створений у попередній версії, до нового формату без повторного індексування документів.
string sourceIndexFolder = @"c:\MyOldIndex\"; // Specify path to the index of a previous version
string targetIndexFolder = @"c:\MyNewIndex\"; // Specify path to the folder for the updated index
IndexUpdater updater = new IndexUpdater(); // Creating an index updater
if (updater.CanUpdateVersion(sourceIndexFolder)) // Checking whether the index version can be updated
{
VersionUpdateResult result = updater.UpdateVersion(sourceIndexFolder, targetIndexFolder); // Updating the index version; the source index is not changed
}
Примітки щодо оновлення
Врахуйте наступні зміни при оновленні з попередньої версії:
- Формат індексу змінився. Індекси попередніх версій потрібно конвертувати за допомогою класу
IndexUpdaterперед їх відкриттям. Джерельні документи не потрібні, конвертований індекс зберігається в іншу папку, і вихідний індекс не змінюється. - Словники термінів фіксуються після того, як індекс містить документи. Алфавіт, словник токенізації, заміни символів, стоп‑слова та налаштування
UseStopWordsіUseCharacterReplacementsмають бути налаштовані до індексування першого документа. Пізніша зміна викликаєInvalidOperationException. - Несумісні індекси не зливаються.
Index.MergeвикликаєInvalidOperationException, якщо злиті індекси розбивають текст на терміни по‑різному. - Пошук багатопотоковий за замовчуванням. При типових
IndexSettings.SearchThreadsпошук використовує стільки потоків, скільки ядер процесора. Щоб обмежити кількість потоків, встановіть властивість явно. - Два нові налаштування індексу увімкнено за замовчуванням. Щоб зберегти попередню поведінку, встановіть
ReplaceUnpairedSurrogatesіSkipBlendedOnlyTermsуfalseперед створенням індексу. - Видалені документи фізично видаляються під час оптимізації. Викличте
Index.Optimize, щоб звільнити простір. - Кількість частин змінилася. Пошук за частинами більше не повертає частину для кожного сегмента. Ітеруйте частини, доки
SearchResult.NextChunkSearchTokenне дорівнює null, замість того, щоб покладатися на кількість сегментів.
Як отримати оновлення
NuGet
- NuGet – Встановіть останній пакет:
# Package Manager
NuGet\Install-Package GroupDocs.Search -Version 26.10.0
# .NET CLI
dotnet add package GroupDocs.Search --version 26.10.0
# Package Manager
NuGet\Install-Package GroupDocs.Search.NETFramework -Version 26.10.0
# .NET CLI
dotnet add package GroupDocs.Search.NETFramework --version 26.10.0
Пряме завантаження
- Direct Download – Завантажте скомпільовані збірки для .NET з офіційної сторінки релізу:
https://releases.groupdocs.com/search/net/new-releases/groupdocs.search-for-.net-26.10-dlls-only/
https://releases.groupdocs.com/search/net/new-releases/groupdocs.search-for-.net-26.10/
Ресурси
- Full Release Notes – https://releases.groupdocs.com/search/net/release-notes/2026/groupdocs-search-for-net-26-10-release-notes/
- Documentation – https://docs.groupdocs.com/search/net/
- Code Examples – https://github.com/groupdocs-search/GroupDocs.Search-for-.NET/
- Free Support Forum – https://forum.groupdocs.com/c/search/
- Використовуйте його з AI‑агентами – сервер GroupDocs.Search MCP запускає цей движок локально для Claude, Cursor і Copilot: https://docs.groupdocs.com/search/mcp/ · Do you need a vector database to ask questions about a folder of documents?