我即将在我的网站上创建一个简单的搜索工具,用户将在其中输入大约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,例如List遍历所有30,000条记录,填充List,找出匹配最多次的那些并使用类似
返回前10 if Description.contains(keyword1);
然后找出填充MatchedWords字段的字符串中出现的次数。
答案 0 :(得分:8)
答案 1 :(得分:5)
您应该使用全文索引解决方案。 MS SQL Server 7及更高版本内置了full text indexing engine(here's a decent overview article)。您还可以考虑使用Lucene等外部产品(适用于Java和C#/.NET)。
答案 2 :(得分:2)
我认为您只想使用C#来解析搜索参数,而不是实际执行搜索和聚合...所以不,这不是最好的方式。使用SQL Server进行搜索繁重。
答案 3 :(得分:1)
答案 4 :(得分:1)
如果您使用的是Java或C#,我建议分别推荐Lucene或Lucene.NET。
答案 5 :(得分:1)
使用全文搜索引擎,例如Lucene。还存在.NET version。