我有一个包含 VARCHAR 类型列的表。我想根据用户输入查询在列内搜索字符串。我想实现近似搜索。我的表包含许多记录。我认为有一些方法可以实现搜索。
在 C# 中加载所有记录并对其应用搜索算法。(但它会消耗太多的内存。)
单独或以某些预定义的批量大小获取记录并对其应用搜索算法。(但它会快速建立数据库连接,这可能会降低性能。)
我确信,将会有一些其他的机制来实现这个功能或一些技术来存储数据,以便我可以更快地搜索它。
任何人都可以给我任何更好的想法来实现这个吗?
我有一个包含 VARCHAR 类型列的表。我想根据用户输入查询在列内搜索字符串。我想实现近似搜索。我的表包含许多记录。我认为有一些方法可以实现搜索。
在 C# 中加载所有记录并对其应用搜索算法。(但它会消耗太多的内存。)
单独或以某些预定义的批量大小获取记录并对其应用搜索算法。(但它会快速建立数据库连接,这可能会降低性能。)
我确信,将会有一些其他的机制来实现这个功能或一些技术来存储数据,以便我可以更快地搜索它。
任何人都可以给我任何更好的想法来实现这个吗?
Lucene是最好的搜索方式之一。您仍然可以将您的字符串存储在数据库中,但从中构建一个 Lucene 索引,然后使用它进行搜索。
SQL Server 具有内置功能,可以完全按照您的要求进行操作,这称为全文搜索。
此处来自 Microsoft 的概述:http: //msdn.microsoft.com/en-us/library/ms142571.aspx
一般概念是您告诉 SQL Server 哪些表/列包含可搜索的文本,它会构建节省空间和查询效率的“全文索引”;这些索引是异步构建的(因此您的更新/插入不会减慢速度),并且从 SQL Server 2005 开始,它们与您的数据库一起存储(例如,在备份中),因此它们很容易管理。
当您要搜索时,查询语言不同于“普通”文本匹配。
全文搜索甚至在免费的“SQL Server 2008 Express with Advanced Services”版本中提供,因此成本不再是问题。