C# 如何为对象创建内部搜索引擎

C# 如何为对象创建内部搜索引擎,c#,list,search,object,razor,C#,List,Search,Object,Razor,嗨,我要在我的.cshtml网站上创建一个内部搜索引擎 引擎将在对象列表中进行搜索。并将根据搜索条件返回一个列表 返回的列表按搜索词在对象中的次数以及是否在对象的标题中排序 该对象有一个标题和内容,将在其中进行搜索。两者都是字符串 我的问题是如何以最有效的方式进行,因为我考虑了很多循环和临时列表。但这需要大量的响应时间。使用二进制搜索会更好吗?如何? 或者如果已经有一个应用程序可以这样做,并且允许我自己设计输出 PS:如果有帮助的话,所有对象都来自数据库。我不习惯razor或ASP.net,但在

嗨,我要在我的
.cshtml
网站上创建一个内部搜索引擎

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

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

该对象有一个
标题
内容
,将在其中进行搜索。两者都是字符串

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


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

我不习惯razor或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的支持正则表达式。

标题
内容
简单字符串属性吗?如果担心性能,最好在数据库中执行。SQL Server有一个全文搜索组件,可以使事情变得更简单。此外,二进制搜索将用于排序的数据,如索引。我认为这在这里不适用。你可以用简单的
s来获取列表本身。排序可能有点困难。不知道是否在数据库端使用类似于
(LEN(ColumnToCheck)-LEN(REPLACE(ColumnToCheck,“theSearchTerm”)的东西进行排序)
(您只希望它用于排序,如果您想要实际发生的次数,您需要除以
LEN(“theSearchTerm”)
)比在应用程序端使用类似于
Regex.Matches(ColumnToCheck,“thesearch”).Count的东西进行排序要快。是的。这两个属性都是stringsHow,如果sql看起来像我已经尝试过的,但是我得到了所有的对象,看起来是随机顺序。但是,如果我只想显示一个包含搜索词的对象列表,我的sql效率不够,但我会尝试创建查询。如果您想只显示包含单词add.Where(o=>o.Weight>0)的对象,那么它可以工作!美好的对于像我这样的其他noob,我要补充的是,对于
Regex
,您需要
namespace System.Text.RegularExpressions
,并且
Regex.Matches
是区分大小写的^^