我正在使用 SQL Server 2014 中的全文搜索查询在 C# 中编写应用程序。用户需要能够使用包含多达 100 000 个参数的非常大的查询来搜索数据库。例如:
FTS 查询:
SELECT * FROM Client WHERE contains(Name, '"John" OR "Sarah"')
LIKE 查询:
SELECT * FROM Client WHERE Name in ('John', 'Sarah')
除了 2 个名字,我们有 100 000 个名字。显然,这超出了 SQL 支持的最大查询长度。该数据库包含超过 100 万条记录。在某些情况下,我需要查找以指定字符串开头的客户端名称,这就是 FTS 优于“in”或“like”子句的原因。除了将请求批处理成许多块之外,是否有一些巧妙的绕过方法?有没有比使用 SQL 数据库更好的选择?
我也尝试使用 Lucene.NET 实现搜索,但是为超过 100 万条记录生成索引需要很多小时,这是不可接受的,因为数据将每天同步。