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

Пряме завантаження

Ресурси