c# - 如何创建更精准的搜索?

标签 c# linq

无论是在 jquery 还是 c# 中,我都需要一个准确的搜索功能。如果可能的话,我希望搜索像谷歌一样出色:-)

C#代码如下:

简要说明:
这将搜索数据库中具有完整信息的所有用户。它搜索除当前登录用户之外的所有用户。

string[] ck = keyword.Split(new string[] { " ", ",", "." },
                            StringSplitOptions.RemoveEmptyEntries);

using (dbasecore db = ConfigAndResourceComponent.BaseCampContext())
{
    var results = (from u in db.users
                   join uinfo in db.userinfoes 
                        on u.UserID equals uinfo.UserID
                   where u.UserID != userid && 
                        (ck.Contains(u.LastName) || ck.Contains(u.FirstName) ||
                         ck.Contains(u.MiddleName) || ck.Contains(u.LoginID))
                   orderby u.LastName, u.FirstName, u.MiddleName ascending
                   select uinfo).Skip(skip).Take(take).ToList();

    return (from i in results select new UserInfo(i)).ToList();
}  

结果:

enter image description here

被圈起来的名字必须在搜索项的顶部,因为它匹配更多的关键字。
有什么想法吗?

最佳答案

有几种方法可以实现你想要的:

1) 编写自己的排名算法。这意味着,您使用 Linq 获得结果,然后使用自己的排名函数对它们进行排序——这可能很简单,比如将请求拆分为单词并计算这些单词在每个结果中的出现次数,或者更复杂的事情,比如使用词干提取来查找不同形式的请求术语、测量术语之间的距离、提升某些术语等。我不建议这样做 - 因为 Like 查询在 SQL 上很慢,你需要写一些已经写好的东西。

2) 使用 Sql Server 全文搜索:http://msdn.microsoft.com/en-us/library/ms142524(v=sql.105).aspx .虽然我不喜欢使用 SQL Server 全文搜索,但它是一个很好且可行的解决方案。

3) 使用第三方全文搜索,有一些替代方案,Lucene ( http://www.codeproject.com/Articles/29755/Introducing-Lucene-Net ) 可能是.net 中使用最多的。这给了你速度和灵 active ,你可以用各种方式索引你的数据,但你肯定会响应索引它。在 Lucene 之上还有一些 API,例如我最喜欢的 Solr - 尽管对您来说可能太多了。

关于c# - 如何创建更精准的搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16813321/

相关文章:

c# - 从自定义列表<T>返回不按顺序的重复项目 C#

c# - 过滤器函数的奇数签名

c# - 正则表达式获取模式的最后一次出现

c# - 如何遍历动态类型数组

c# - 按顺序获取第一个缺失元素的有效方法?

linq - Sitecore7 Linq to Sitecore 仅适用于 SearchResultItem 而不适用于自定义映射类

C# - 如果列表包含列表

c# - 试图获取表示类层次结构的字符串

javascript - 如何在 ASP.net (.aspx) 中 5 分钟后显示按钮?

c# - 从 `XPathNodeIterator` 到 `linq` 的转换