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(Unicode 替换字符),而不是被删除;仅由混合字符组成的词项将不再被索引。

公共 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

直接下载

资源