SphinxConnector.NET 是一个 .NET 客户端库,用于从任何 .NET 程序中获取 Sphinx 全文搜索引擎的特性和功能。
SphinxConnector.NET 是一个通用的 .NET 客户端库,可以从任何 .NET 程序中获取 Sphinx 全文搜索引擎的特性和功能。
它提供了一个雄辩的查询 API,可以使用 Sphinx。NET 比以往任何时候都更简单、更舒适。其雄辩的界面旨在实现高效和简单的使用。直接在您的记录版本中操作允许您以强类型、类似 LINQ 的风格生成您的查询。
SphinxConnector.NET是完全异步的。NET 客户端 API 用于其 Sphinx 全文搜索引擎及其自己的分支 Manticore 搜索。它提供了一个雄辩的查询 API,具有对象映射功能,可以轻松地将 Sphinx 集成到您自己的应用程序中。设置完成后,SphinxConnector.NET 在试用模式下工作,该模式在性能上有一些限制。
SphinxConnector.NET 强大的功能:
流利的API
fluent API 为您提供类似 LINQ 的查询 API 来设计全文查询。它是根据使用 Sphinx 全文搜索引擎的 .NET 开发人员的需求量身定制的。自然地,Fluent API 支持诸如对结果进行排序和分组、定义结果集大小以及将您的结果投影到例如匿名类型等任务。除了查询之外,它还支持从实时索引中保存和删除文档,并根据上下文生成优化语句。
在幕后,SphinxConnector.NET 将您的输入转换为 SphinxQL,使用其 SphinxQL 基础结构执行您的查询,并将结果映射到您的文档模型。使用UsinUsinghinxQL API作为底层查询机制,用户无需手动编写即可受益于连接池等功能。
查询索引
要开始查询,您必须创建一个表示您的文档的类,然后一切顺利。
查询 Sphinx 索引是通过 IFulltextSession 接口完成的。它提供了一个 Query 方法,该方法将您的文档模型作为通用类型参数并返回 IFulltextQuery 的实例。
IFulltextQuery 接口为您提供了轻松订购、分组或过滤文档所需的所有方法。SphinxConnector.NET 自动将对 .NET 类型的受支持方法和属性的调用转换为其等效的 SphinxQL 函数。支持的是,例如,系统的方法。System.DateTime 的数学类和属性。此外,SphinxConnector.NET 定义了用于查询的扩展方法,如 In 和 Interval。
异步方法
所有 fluent API 方法都有同步和异步实现。
JSON 属性
随着版本的发布,Sphinx 引入了一种新的属性类型,允许用户将 JSON 对象存储在索引中。SphinxConnector.NET 从版本开始就支持这些属性(当时通过 Json.NET,因为 System.Text.Json 已经取代了 Json.NET 版本)。
未来查询
未来的查询提供了一种在需要执行多个查询的场景中优化性能的简单方法。将来的查询仅在访问其结果时执行。这允许 SphinxConnector.NET 在单个网络往返中向 Sphinx 服务器发送多个查询。
保存和删除文档
要将文档保存到实时索引,只需将文档模型的实例传递给 IFulltextSession 接口的 Save 方法。
要从实时索引中删除一个或多个文档,您可以将它们的 ID 传递给 Delete 方法或要删除的文档实例。
从示例中可以看出,您调用 FlushChanges 来让 SphinxConnector.NET 知道您所做的更改应该持久化。
自动优化和批处理
当您调用 FlushChanges 时,所有挂起的保存和删除都将被最有效地收集和执行。对于上面的示例,所有删除都在单个 DELETE 语句中执行,从而避免了不必要的网络往返。
当 SphinxConnector.NET 检测到它需要保存多个文档时,它会通过为每个批次生成单个 REPLACE 语句来批量插入它们。与逐个插入文档相比,这导致了几个数量级的加速。批量大小当然是可配置的,以便您可以根据工作负载对其进行微调。
约定优于配置
SphinxConnector.NET 对其许多配置设置使用基于约定的方法。例如,当将对象映射到索引或将属性映射到属性时,您不必提供任何手动映射或使用自定义属性使代码混乱。映射是通过 FulltextStore 类中定义的约定完成的。当然,您可以根据需要更改默认约定。
请注意,约定是通过委托定义的。通常,您必须实现接口或从基类继承以更改您正在使用的组件中的某些行为。大多数时候,我们认为这会带来不必要的开销,因为自定义只是几行代码。在这些情况下,提供一个简单的委托可以节省时间,保持代码干净且易于维护。在更复杂的场景中,您可以选择以您认为合适的方式实现抽象,而不受某些 3rd 方接口的限制或约束。
SphinxQL 的对象映射
如果需要,您还可以直接执行 SphinxQL 查询,并让 SphinxConnector.NET 将结果映射到您的文档对象。
专为可测试性而设计
fluent API 的所有功能都通过接口公开。通过应用控制反转和依赖注入等技术,您可以在必要时通过用模拟替换这些接口来轻松测试您的代码。
将 fluent API 与您最喜欢的 DI 容器一起使用也很简单:
经典 API
SphinxConnector.NET 提供用于执行 SphinxQL 语句的本机 API 和标准 ADO.NET 2.0 类的高性能实现。请参阅下面的每个 API 公开的功能列表:
SphinxQL
基于标准 ADO.NET 2.0 类:
SphinxQL 连接
SphinxQLConnectionStringBuilder
SphinxQL 命令
SphinxQL 数据适配器
SphinxQL 数据读取器
SphinxQL 参数
SphinxQL事务
完全异步
为 Sphinx 特定的数据类型和特性量身定制,例如
从 .NET 类型到 Sphinx 类型的自动转换,反之亦然
处理 MVA 值的方法
在实时索引中插入和更新记录
从任何索引类型中选择
通过 DataReader 或 DataAdapter 选择
最大性能的连接池
支持交易
支持 TransactionScope(本地和分布式事务)
支持命令参数
自动检测和使用基于 Sphinx 版本的特性,例如,Sphinx 2.0.1 及更高版本的服务器端多查询支持
原生 API*
支持 Sphinx 2.0.1 及更高版本
支持 Sphinx 1.10.1 引入的字符串属性
支持 0.9.9 中引入的功能,例如:
持久连接:为多个操作打开一个连接以最小化网络开销。
覆盖属性:在高级搜索场景中临时更改属性值而不修改实际值。
Select 子句:编写类似 SQL 的语句来操作属性
可配置编码
搜索相关功能:
设置值和范围过滤器
为批量执行安排多个查询
指定 Sphinx 应该如何匹配和排列文档
和更多
访问 Sphinx 搜索引擎公开的附加功能:
构建摘录
构建关键字
更新属性
查询 Sphinx 以获取状态变量
SphinxConnector.NET 使用自定义类型作为对 Sphinx 属性进行操作的方法的参数。这使您可以对这些方法进行强类型访问,并使编译器能够检查该操作对于给定类型是否有效。
*请注意,本机 API 仅用于支持遗留项目,并在未来版本中删除。新项目应该使用 fluent API 或 SphinxQL。
日志记录
SphinxConnector.NET 支持记录不同类型的消息,以帮助开发人员识别问题或优化他们的设置。自 V5 发布以来,SphinxConnector.NET 提供了自己的简单日志抽象,取代了以前使用的 Common。日志库。主库中包含一个简单的控制台记录器,其他 NLog、log4net、Serilog 和 Microsoft.Extensions.Logging 可通过 NuGet 获得。