GroupDocs.Search for .NET 26.10 現已推出。這是一個 主要版本:索引格式已重新設計,使索引 佔用更少的磁碟空間,需要 一半的 RAM,且開啟速度 快 2 到 4 倍。搜尋、刪除、最佳化與影像搜尋的速度提升 數倍到數百倍,搜尋不再等待索引,且索引資料受到校驗碼與原子更新的保護。

現有由 22.7–26.8 版本建立的索引會 在不重新索引的情況下 轉換為新格式。本次發行包含 22 項變更:4 項新功能、15 項改進與 3 項修正。

效能亮點

大多數提升會隨著索引大小與段落數量的增加而顯著。

項目 在 26.10 中的提升
已載入索引所需的 RAM 減少 2 倍
開啟索引 快 2 到 4 倍
磁碟上的索引大小 隨著被索引資料成比例增長;索引越大,節省越多
大型索引中單字搜尋 快至 2 倍;罕見字 快 10 到 40 倍
大型索引中的模糊搜尋 快 2.5 到 5 倍
大型索引中的萬用字元搜尋 快 2.5 到 3 倍
分塊、正規表達式、數值範圍與模糊搜尋 快 7 到 150 倍
日期範圍搜尋 快 2 到 27 倍
刪除文件 快數百倍,記憶體減少 4 倍,無需額外磁碟空間
索引最佳化 快 4 倍,記憶體減少 4 倍
索引期間的峰值 RAM 減少 2 倍
取得文件的儲存文字 快至 15 倍
影像搜尋資料 記憶體減少 2.9 倍,載入快 6.6 倍,儲存快 100 倍;反向影像搜尋快至 1.8 倍
索引被修改時的搜尋 不再被阻塞
索引可靠性 校驗碼與原子變更;中斷的操作會完成或回滾
搜尋執行緒 預設使用所有處理器核心;可隨時變更

此版本的新功能

鍵 摘要 類別
SEARCHNET-3665 實作隨時變更搜尋執行緒數量的能力 功能
SEARCHNET-3666 實作取代未配對代理字元的選項 功能
SEARCHNET-3667 實作跳過僅由混合字元組成之詞彙的選項 功能
SEARCHNET-3668 實作在不重新索引文件的情況下,將索引版本更新為新索引格式 功能
SEARCHNET-3669 實作索引磁碟空間使用的最佳化 改進
SEARCHNET-3670 實作已載入索引之 RAM 使用的最佳化 改進
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 防止合併以不同方式處理文字的索引 修正

主要功能

索引儲存與可靠性

  • 索引大小現在會隨著被索引資料的比例成長,因此擁有許多段的大型索引可節省最多空間。
  • 已載入的索引只需要一半的 RAM,且開啟索引的速度提升 2 到 4 倍。
  • 索引資料受到校驗碼保護,且所有變更皆以原子方式套用。若操作因錯誤、斷電或程序終止而中斷,索引將保持先前的一致狀態。

搜尋

  • 僅讀取包含查詢詞彙的段落,從而加速詞彙、模糊、萬用字元與分塊搜尋。
  • 搜尋預設使用所有處理器核心,且可隨時透過 IndexSettings.SearchThreads 變更執行緒數量。
  • 搜尋與修改索引的操作(索引、更新、刪除、合併、最佳化)不再相互阻塞。每次搜尋皆使用索引的一致快照。

索引與維護

  • 刪除文件不再重新寫入索引:文件會立即從搜尋中排除,並在最佳化時實際移除。
  • 索引最佳化速度提升 4 倍,且使用的記憶體減少 4 倍;極大型索引會被最佳化為多個有限大小的段落。
  • 索引過程的峰值 RAM 使用量約減半。

文字處理

  • 大小寫在 .NET Framework 與 .NET 上的處理方式相同,搜尋結果不受平台影響。
  • 未配對的代理字元會被替換為 U+FFFD 而非直接移除,且僅由混合字元組成的詞彙將不再被索引。

公開 API 變更

已在 GroupDocs.Search.IndexSettings 類別中新增兩個屬性:

  • Boolean ReplaceUnpairedSurrogates – 用 Unicode 替代字元 (U+FFFD) 取代未配對的 UTF-16 代理字元。預設為啟用。
  • 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

直接下載

資源