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