GroupDocs.Search dla .NET 26.10 jest już dostępny. To główne wydanie: format indeksu został przeprojektowany, więc indeksy zajmują mniej miejsca na dysku, potrzebują połowy pamięci RAM i otwierają się 2‑4 razy szybciej. Wyszukiwanie, usuwanie, optymalizacja i wyszukiwanie obrazów są przyspieszone kilkakrotnie do setek razy, wyszukiwania nie czekają już na indeksowanie, a dane indeksu są chronione sumami kontrolnymi i atomowymi aktualizacjami.

Istniejące indeksy utworzone w wersjach 22.7–26.8 są konwertowane do nowego formatu bez ponownego indeksowania. Wydanie zawiera 22 zmiany: 4 nowe funkcje, 15 ulepszeń i 3 poprawki.

Najważniejsze osiągnięcia wydajności

Większość zysków rośnie wraz z rozmiarem indeksu i liczbą jego segmentów.

Co Zysk w 26.10
Pamięć RAM wymagana przez załadowany indeks 2‑razy mniej
Otwieranie indeksu 2‑4 razy szybciej
Rozmiar indeksu na dysku Rośnie proporcjonalnie do danych indeksowanych; im większy indeks, tym większe oszczędności
Wyszukiwanie słowa w dużych indeksach Do 2‑krotnie szybciej; rzadkie słowa 10‑40 razy szybciej
Wyszukiwanie przybliżone w dużych indeksach 2,5‑5 razy szybciej
Wyszukiwanie z użyciem znaków wieloznacznych w dużych indeksach 2,5‑3 razy szybciej
Wyszukiwanie znaków wieloznacznych, wyrażeń regularnych, zakresów liczbowych i przybliżone po fragmentach 7‑150 razy szybciej
Wyszukiwanie zakresu dat 2‑27 razy szybciej
Usuwanie dokumentów Setki razy szybciej, 4‑razy mniej pamięci, bez dodatkowego miejsca na dysku
Optymalizacja indeksu 4‑razy szybciej, 4‑razy mniej pamięci
Szczytowe zużycie RAM podczas indeksowania 2‑razy mniej
Pobieranie przechowywanego tekstu dokumentu Do 15‑krotnie szybciej
Dane wyszukiwania obrazów 2,9‑razy mniej pamięci, ładowane 6,6‑razy szybciej, zapisywane 100‑razy szybciej; odwrócone wyszukiwanie obrazów do 1,8‑razy szybciej
Wyszukiwanie podczas modyfikacji indeksu Już nie blokuje
Niezawodność indeksu Sumy kontrolne i zmiany atomowe; przerwane operacje są dokańczane lub wycofywane
Wątki wyszukiwania Wszystkie rdzenie procesora domyślnie; można zmienić w dowolnym momencie

Co nowego w tym wydaniu

Klucz Podsumowanie Kategoria
SEARCHNET-3665 Implementacja możliwości zmiany liczby wątków wyszukiwania w dowolnym momencie Feature
SEARCHNET-3666 Implementacja opcji zastępowania nieparzystych znaków zastępczych Feature
SEARCHNET-3667 Implementacja opcji pomijania terminów składających się wyłącznie z znaków mieszanych Feature
SEARCHNET-3668 Implementacja aktualizacji wersji indeksu do nowego formatu bez ponownego indeksowania dokumentów Feature
SEARCHNET-3669 Implementacja optymalizacji zużycia miejsca na dysku przez indeks Improvement
SEARCHNET-3670 Implementacja optymalizacji zużycia RAM przez załadowany indeks Improvement
SEARCHNET-3671 Implementacja optymalizacji szybkości ładowania indeksu Improvement
SEARCHNET-3672 Implementacja optymalizacji szybkości wyszukiwania w dużych indeksach Improvement
SEARCHNET-3673 Implementacja optymalizacji wyszukiwania przybliżonego Improvement
SEARCHNET-3674 Implementacja optymalizacji wyszukiwania znaków wieloznacznych Improvement
SEARCHNET-3675 Implementacja optymalizacji usuwania i aktualizacji dokumentów Improvement
SEARCHNET-3676 Implementacja optymalizacji operacji optymalizacji indeksu Improvement
SEARCHNET-3677 Zezwolenie na wyszukiwanie podczas modyfikacji indeksu Improvement
SEARCHNET-3678 Poprawa niezawodności indeksu Improvement
SEARCHNET-3679 Implementacja optymalizacji zużycia pamięci podczas indeksowania Improvement
SEARCHNET-3680 Implementacja optymalizacji pobierania tekstu dokumentu Improvement
SEARCHNET-3681 Implementacja optymalizacji wyszukiwania obrazów Improvement
SEARCHNET-3682 Implementacja jednolitego traktowania wielkości liter na wszystkich platformach Improvement
SEARCHNET-3688 Implementacja optymalizacji wyszukiwania po fragmentach Improvement
SEARCHNET-3683 Naprawa domyślnej liczby wątków wyszukiwania Fix
SEARCHNET-3684 Zapobieganie niespójnemu indeksowaniu po zmianie słowników terminów Fix
SEARCHNET-3685 Zapobieganie łączeniu indeksów, które przetwarzają tekst inaczej Fix

Główne funkcje

Przechowywanie i niezawodność indeksu

  • Rozmiar indeksu rośnie proporcjonalnie do danych indeksowanych, więc duże indeksy z wieloma segmentami oszczędzają najwięcej miejsca.
  • Załadowany indeks potrzebuje połowy pamięci RAM, a otwieranie indeksu jest 2‑4 razy szybsze.
  • Dane indeksu są chronione sumami kontrolnymi, a wszystkie zmiany są stosowane atomowo. Jeśli operacja zostanie przerwana błędem, awarią zasilania lub zakończeniem procesu, indeks pozostaje w poprzednim spójnym stanie.

Wyszukiwanie

  • Czytane są tylko segmenty zawierające terminy zapytania, co przyspiesza wyszukiwanie słów, przybliżone, z użyciem znaków wieloznacznych i po fragmentach.
  • Wyszukiwanie wykorzystuje wszystkie rdzenie procesora domyślnie, a liczbę wątków można zmienić w dowolnym momencie poprzez IndexSettings.SearchThreads.
  • Wyszukiwania i operacje modyfikujące indeks (indeksowanie, aktualizacja, usuwanie, łączenie, optymalizacja) nie blokują się nawzajem. Każde wyszukiwanie pracuje na spójnym migawce indeksu.

Indeksowanie i utrzymanie

  • Usuwanie dokumentów nie powoduje ponownego zapisu indeksu: dokumenty są natychmiast wykluczane z wyników wyszukiwania i fizycznie usuwane podczas optymalizacji.
  • Optymalizacja indeksu jest 4‑razy szybsza i zużywa 4‑razy mniej pamięci; bardzo duże indeksy są optymalizowane do kilku segmentów o ograniczonym rozmiarze.
  • Indeksowanie zużywa około połowy szczytowego RAM.

Przetwarzanie tekstu

  • Wielkość liter jest obsługiwana identycznie w .NET Framework i .NET, więc wyniki wyszukiwania nie zależą od platformy.
  • Nieparzyste znaki zastępcze są zamieniane na U+FFFD zamiast usuwania, a terminy składające się wyłącznie z znaków mieszanych nie są już indeksowane.

Zmiany w publicznym API

Do klasy GroupDocs.Search.IndexSettings dodano dwa właściwości:

  • Boolean ReplaceUnpairedSurrogates – zastępuje nieparzyste znaki zastępcze UTF‑16 znakiem zamiennym Unicode (U+FFFD). Włączone domyślnie.
  • Boolean SkipBlendedOnlyTerms – wyklucza z indeksowania terminy składające się wyłącznie z znaków mieszanych. Włączone domyślnie.

Oba ustawienia są ustalane w momencie tworzenia indeksu.

Przykład kodu

Poniższy przykład aktualizuje indeks utworzony w poprzedniej wersji do nowego formatu indeksu bez ponownego indeksowania dokumentów.

string sourceIndexFolder = @"c:\MyOldIndex\"; // Określ ścieżkę do indeksu z poprzedniej wersji
string targetIndexFolder = @"c:\MyNewIndex\"; // Określ ścieżkę do folderu dla zaktualizowanego indeksu

IndexUpdater updater = new IndexUpdater(); // Tworzenie aktualizatora indeksu

if (updater.CanUpdateVersion(sourceIndexFolder)) // Sprawdzanie, czy wersję indeksu można zaktualizować
{
    VersionUpdateResult result = updater.UpdateVersion(sourceIndexFolder, targetIndexFolder); // Aktualizacja wersji indeksu; indeks źródłowy nie jest zmieniany
}

Uwagi przy aktualizacji

Weź pod uwagę następujące zmiany przy przechodzeniu z poprzedniej wersji:

  • Format indeksu uległ zmianie. Indeksy z poprzednich wersji muszą być skonwertowane przy użyciu klasy IndexUpdater, zanim będzie można je otworzyć. Dokumenty źródłowe nie są wymagane, skonwertowany indeks jest zapisywany w innym folderze, a indeks źródłowy nie jest modyfikowany.
  • Słowniki terminów są ustalane po dodaniu pierwszych dokumentów. Alfabet, słownik tokenizacji, zamiany znaków, słowa stop oraz ustawienia UseStopWords i UseCharacterReplacements muszą być skonfigurowane przed indeksowaniem pierwszego dokumentu. późniejsza zmiana powoduje InvalidOperationException.
  • Niekompatybilne indeksy nie są łączone. Index.Merge zgłasza InvalidOperationException, jeśli łączone indeksy dzielą tekst na terminy w inny sposób.
  • Wyszukiwanie jest domyślnie wielowątkowe. Przy domyślnym IndexSettings.SearchThreads wyszukiwanie używa tylu wątków, ile jest rdzeni procesora. Aby ograniczyć liczbę wątków, ustaw właściwość explicite.
  • Dwa nowe ustawienia indeksu są domyślnie włączone. Aby zachować poprzednie zachowanie, ustaw ReplaceUnpairedSurrogates i SkipBlendedOnlyTerms na false przed utworzeniem indeksu.
  • Usunięte dokumenty są fizycznie usuwane podczas optymalizacji. Wywołaj Index.Optimize, aby odzyskać miejsce.
  • Liczba fragmentów uległa zmianie. Wyszukiwanie po fragmentach nie zwraca już fragmentu dla każdego segmentu. Iteruj po fragmentach, dopóki SearchResult.NextChunkSearchToken nie jest nullem, zamiast polegać na liczbie segmentów.

Jak uzyskać aktualizację

NuGet

  • NuGet – Zainstaluj najnowszy pakiet:
# 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

Bezpośrednie pobranie

Zasoby