2

您好我要在我的.cshtml网站上创建一个内部搜索引擎。

引擎将搜索对象列表。并将根据搜索条件返回一个列表。

返回的列表按搜索词在对象中的次数以及是否在对象的标头中排序。

该对象有一个header并且content将被搜索。两者都是字符串。

我的问题是如何以最有效的方式解决这个问题,因为我正在考虑很多循环和临时列表。但这需要很多响应时间。使用二进制搜索会更好吗?如何?或者,如果已经有一个应用程序可以做到这一点,并且允许我自己设计输出。

PS:如果有帮助,所有对象都来自数据库。

4

1 回答 1

2

我不习惯剃须刀也不习惯 ASP.net,但在 C# 中使用对象列表,可以根据您的搜索模式为每个对象赋予权重并按权重排序列表:

 var searchPattern = "word1|word2";
 var regex = new Regex(searchPattern);
 var search = list.Select( o => 
                        new { Weight = regex.Matches(o.Header).Count * 20 
                                     + regex.Matches(o.Content).Count * 10, 
                              Value = o})
                  .OrderByDescending(o => o.Weight);

如果您在数据库中有对象,则可以将其重写为 sql 查询,似乎 sql server LIKE 支持正则表达式。

于 2013-09-25T15:51:35.523 回答