您好我要在我的.cshtml
网站上创建一个内部搜索引擎。
引擎将搜索对象列表。并将根据搜索条件返回一个列表。
返回的列表按搜索字在对象中的次数排序,如果它在对象的标题中。
该对象有一个header
和content
,可以搜索到。两者都是字符串。
我的问题是如何以最有效的方式解决这个问题,因为我正在思考很多循环和临时列表。但这需要很多响应时间。使用二分搜索会更好吗?如何? 或者,如果有一个应用程序已经存在,那么我可以自己设计输出。
PS:如果有帮助,所有对象都来自数据库。
答案 0 :(得分: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支持正则表达式。