我即将在我的网站上做一个简单的搜索设施,在那里用户将输入大约2-4个关键字,这将在我的MS SQL数据库中的一个表的两列中进行搜索。一列是名为title的varchar (50),另一列是名为description的varchar(2500)。任何时候都可能有大约20,000-30,000条记录可供搜索。
关键字需要返回“最佳匹配”-你知道你在像ebay这样的搜索页面上得到的那种返回最接近的匹配。我想这样做的方式似乎有点天真-我认为我可以将表中的所有30,000条记录读入并像这样进行对象:
public class SearchableObject
{
string Title {get; set;}
string Description {get; set;}
int MatchedWords {get; set;}
}然后创建该对象的列表,例如List遍历所有30,000条记录,填充该列表,找出匹配次数最多的记录,并使用如下命令返回前10条记录
if Description.contains(keyword1);然后找出它在填充MatchedWords字段的字符串中出现的次数。
我的问题是,这是最好的方法吗?如果没有,那会是什么呢?
发布于 2009-10-20 20:38:31
全文索引搜索可以做到这一点。
http://msdn.microsoft.com/en-us/library/ms142547.aspx
发布于 2009-10-21 04:40:22
您应该使用全文索引解决方案。MS SQL Server7和更高版本具有内置的full text indexing engine (here's a decent overview article)。您还可以考虑使用外部产品,如Lucene (可用于Java和C#/.NET)。
发布于 2009-10-20 20:40:45
我认为您只想使用C#来解析搜索参数,而不是实际执行搜索和聚合……所以不,这不是最好的方法。使用SQL Server执行繁重的搜索任务。
https://stackoverflow.com/questions/1597138
复制相似问题