GroupDocs.Search untuk .NET 26.10 kini tersedia. Ini adalah rilis utama: format indeks telah dirancang ulang, sehingga indeks mengambil ruang lebih sedikit di disk, membutuhkan setengah RAM dan membuka 2 hingga 4 kali lebih cepat. Pencarian, penghapusan, optimalisasi, dan pencarian gambar dipercepat beberapa hingga ratusan kali, pencarian tidak lagi menunggu proses pengindeksan, dan data indeks dilindungi dengan checksum serta pembaruan atomik.

Indeks yang ada yang dibuat oleh versi 22.7–26.8 dikonversi ke format baru tanpa melakukan pengindeksan ulang. Rilis ini berisi 22 perubahan: 4 fitur baru, 15 perbaikan, dan 3 perbaikan bug.

Sorotan Kinerja

Sebagian besar peningkatan meningkat seiring ukuran indeks dan jumlah segmennya.

Apa Peningkatan di 26.10
RAM yang dibutuhkan oleh indeks yang dimuat 2 kali lebih sedikit
Membuka indeks 2 hingga 4 kali lebih cepat
Ukuran indeks di disk Bertambah proporsional dengan data yang diindeks; semakin besar indeks, semakin besar penghematan
Pencarian kata dalam indeks besar Hingga 2 kali lebih cepat; kata langka 10 hingga 40 kali lebih cepat
Pencarian fuzzy dalam indeks besar 2,5 hingga 5 kali lebih cepat
Pencarian wildcard dalam indeks besar 2,5 hingga 3 kali lebih cepat
Pencarian wildcard, ekspresi reguler, rentang numerik, dan fuzzy per potongan 7 hingga 150 kali lebih cepat
Pencarian rentang tanggal 2 hingga 27 kali lebih cepat
Menghapus dokumen Ratusan kali lebih cepat, 4 kali lebih sedikit memori, tidak memerlukan ruang disk tambahan
Optimalisasi indeks 4 kali lebih cepat, 4 kali lebih sedikit memori
Puncak RAM selama pengindeksan 2 kali lebih sedikit
Mengambil teks yang disimpan dari dokumen Hingga 15 kali lebih cepat
Data pencarian gambar 2,9 kali lebih sedikit memori, dimuat 6,6 kali lebih cepat, disimpan 100 kali lebih cepat; pencarian gambar terbalik hingga 1,8 kali lebih cepat
Pencarian saat indeks sedang dimodifikasi Tidak lagi terblokir
Keandalan indeks Checksum dan perubahan atomik; operasi yang terputus selesai atau dibatalkan
Thread pencarian Semua core prosesor secara default; dapat diubah kapan saja

Apa yang baru di rilis ini

Kunci Ringkasan Kategori
SEARCHNET-3665 Implementasikan kemampuan mengubah jumlah thread pencarian kapan saja Fitur
SEARCHNET-3666 Implementasikan opsi untuk mengganti karakter surrogate yang tidak berpasangan Fitur
SEARCHNET-3667 Implementasikan opsi untuk melewatkan istilah yang hanya terdiri dari karakter campuran Fitur
SEARCHNET-3668 Implementasikan pembaruan versi indeks ke format indeks baru tanpa mengindeks ulang dokumen Fitur
SEARCHNET-3669 Implementasikan optimalisasi konsumsi ruang disk sebuah indeks Peningkatan
SEARCHNET-3670 Implementasikan optimalisasi konsumsi RAM sebuah indeks yang dimuat Peningkatan
SEARCHNET-3671 Implementasikan optimalisasi kecepatan pemuatan indeks Peningkatan
SEARCHNET-3672 Implementasikan optimalisasi kecepatan pencarian dalam indeks besar Peningkatan
SEARCHNET-3673 Implementasikan optimalisasi pencarian fuzzy Peningkatan
SEARCHNET-3674 Implementasikan optimalisasi pencarian wildcard Peningkatan
SEARCHNET-3675 Implementasikan optimalisasi penghapusan dan pembaruan dokumen Peningkatan
SEARCHNET-3676 Implementasikan optimalisasi operasi optimalisasi indeks Peningkatan
SEARCHNET-3677 Izinkan pencarian saat indeks sedang dimodifikasi Peningkatan
SEARCHNET-3678 Tingkatkan keandalan indeks Peningkatan
SEARCHNET-3679 Implementasikan optimalisasi penggunaan memori selama pengindeksan Peningkatan
SEARCHNET-3680 Implementasikan optimalisasi pengambilan teks dokumen Peningkatan
SEARCHNET-3681 Implementasikan optimalisasi pencarian gambar Peningkatan
SEARCHNET-3682 Implementasikan penanganan huruf besar/kecil secara identik di semua platform Peningkatan
SEARCHNET-3688 Implementasikan optimalisasi pencarian per potongan Peningkatan
SEARCHNET-3683 Perbaiki jumlah default thread pencarian Perbaikan
SEARCHNET-3684 Cegah pengindeksan tidak konsisten setelah mengubah kamus istilah Perbaikan
SEARCHNET-3685 Cegah penggabungan indeks yang memproses teks secara berbeda Perbaikan

Fitur utama

Penyimpanan dan keandalan indeks

  • Ukuran indeks kini bertambah proporsional dengan data yang diindeks, sehingga indeks besar dengan banyak segmen menghemat ruang paling banyak.
  • Indeks yang dimuat membutuhkan setengah RAM, dan membuka indeks 2 hingga 4 kali lebih cepat.
  • Data indeks dilindungi dengan checksum, dan semua perubahan diterapkan secara atomik. Jika operasi terhenti karena error, kegagalan daya, atau penghentian proses, indeks tetap berada dalam keadaan konsisten sebelumnya.

Pencarian

  • Hanya segmen yang berisi istilah kueri yang dibaca, yang mempercepat pencarian kata, fuzzy, wildcard, dan pencarian per potongan.
  • Pencarian menggunakan semua core prosesor secara default, dan jumlah thread dapat diubah kapan saja melalui IndexSettings.SearchThreads.
  • Pencarian dan operasi yang memodifikasi indeks (pengindeksan, pembaruan, penghapusan, penggabungan, optimalisasi) tidak lagi saling memblokir. Setiap pencarian bekerja dengan snapshot indeks yang konsisten.

Pengindeksan dan pemeliharaan

  • Menghapus dokumen tidak lagi menulis ulang indeks: dokumen dikeluarkan dari pencarian secara langsung dan dihapus secara fisik selama optimalisasi.
  • Optimalisasi indeks 4 kali lebih cepat dan menggunakan 4 kali lebih sedikit memori; indeks sangat besar dioptimalkan menjadi beberapa segmen berukuran terbatas.
  • Pengindeksan mengonsumsi sekitar setengah RAM puncak.

Pemrosesan teks

  • Huruf besar/kecil ditangani secara identik pada .NET Framework dan .NET, sehingga hasil pencarian tidak bergantung pada platform.
  • Karakter surrogate yang tidak berpasangan diganti dengan U+FFFD alih-alih dihapus, dan istilah yang hanya terdiri dari karakter campuran tidak lagi diindeks.

Perubahan API Publik

Dua properti telah ditambahkan ke kelas GroupDocs.Search.IndexSettings:

  • Boolean ReplaceUnpairedSurrogates – mengganti karakter surrogate UTF-16 yang tidak berpasangan dengan karakter pengganti Unicode (U+FFFD). Diaktifkan secara default.
  • Boolean SkipBlendedOnlyTerms – mengecualikan dari pengindeksan istilah yang hanya terdiri dari karakter campuran. Diaktifkan secara default.

Kedua pengaturan ini tetap setelah indeks dibuat.

Contoh kode

Contoh berikut memperbarui indeks yang dibuat oleh versi sebelumnya ke format indeks baru tanpa mengindeks ulang dokumen.

string sourceIndexFolder = @"c:\MyOldIndex\"; // Tentukan path ke indeks versi sebelumnya
string targetIndexFolder = @"c:\MyNewIndex\"; // Tentukan path ke folder untuk indeks yang diperbarui

IndexUpdater updater = new IndexUpdater(); // Membuat pembaruan indeks

if (updater.CanUpdateVersion(sourceIndexFolder)) // Memeriksa apakah versi indeks dapat diperbarui
{
    VersionUpdateResult result = updater.UpdateVersion(sourceIndexFolder, targetIndexFolder); // Memperbarui versi indeks; indeks sumber tidak diubah
}

Catatan peningkatan

Perhatikan perubahan berikut saat meningkatkan dari versi sebelumnya:

  • Format indeks telah berubah. Indeks versi sebelumnya harus dikonversi dengan kelas IndexUpdater sebelum dapat dibuka. Dokumen sumber tidak diperlukan, indeks yang dikonversi disimpan ke folder berbeda, dan indeks sumber tidak dimodifikasi.
  • Kamus istilah ditetapkan sekali indeks berisi dokumen. Alfabet, kamus tokenisasi, penggantian karakter, kata berhenti, serta pengaturan UseStopWords dan UseCharacterReplacements harus dikonfigurasi sebelum dokumen pertama diindeks. Perubahan kemudian akan menimbulkan InvalidOperationException.
  • Indeks yang tidak kompatibel tidak digabungkan. Index.Merge menimbulkan InvalidOperationException jika indeks yang digabung memisahkan teks menjadi istilah secara berbeda.
  • Pencarian multithread secara default. Dengan IndexSettings.SearchThreads default, pencarian menggunakan sebanyak thread sebanyak core prosesor. Untuk membatasi jumlah thread, setel properti secara eksplisit.
  • Dua pengaturan indeks baru diaktifkan secara default. Untuk mempertahankan perilaku sebelumnya, setel ReplaceUnpairedSurrogates dan SkipBlendedOnlyTerms ke false sebelum membuat indeks.
  • Dokumen yang dihapus dihapus secara fisik selama optimalisasi. Panggil Index.Optimize untuk memulihkan ruang.
  • Jumlah potongan telah berubah. Pencarian per potongan tidak lagi mengembalikan satu potongan untuk setiap segmen. Iterasi potongan selama SearchResult.NextChunkSearchToken tidak null alih-alih mengandalkan jumlah segmen.

Cara mendapatkan pembaruan

NuGet

  • NuGet – Instal paket terbaru:
# 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

Unduhan langsung

Sumber daya