您好我要在我的.cshtml
网站上创建一个内部搜索引擎。
引擎将搜索对象列表。并将根据搜索条件返回一个列表。
返回的列表按搜索词在对象中的次数以及是否在对象的标头中排序。
该对象有一个header
并且content
将被搜索。两者都是字符串。
我的问题是如何以最有效的方式解决这个问题,因为我正在考虑很多循环和临时列表。但这需要很多响应时间。使用二进制搜索会更好吗?如何?或者,如果已经有一个应用程序可以做到这一点,并且允许我自己设计输出。
PS:如果有帮助,所有对象都来自数据库。
我不习惯剃须刀也不习惯 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 支持正则表达式。