使用sql和asp.net的高级搜索查询
我有一个表[Users],其中FName、LName和City为3列。我想实现一个搜索算法,该算法从3列中搜索结果,并在其顶部添加AND和OR结果 例如:使用sql和asp.net的高级搜索查询,asp.net,sql,search,Asp.net,Sql,Search,我有一个表[Users],其中FName、LName和City为3列。我想实现一个搜索算法,该算法从3列中搜索结果,并在其顶部添加AND和OR结果 例如: 拉朱·拉姆·班加罗尔 拉姆·拉朱·海得拉巴 克里希纳·拉朱·钦奈 当我搜索Raju Chennai时,应该会得到所有3记录,上面有3条记录,因为这是完全匹配的,其他2条记录可以跟随。我怎样才能做到这一点?请告知。您需要研究搜索加权算法。没有人可以为您编写算法,这是由您决定什么需要更多的权重 像这样的高级搜索并不简单。有太多的因素(太多,无法列
当我搜索Raju Chennai时,应该会得到所有3记录,上面有3条记录,因为这是完全匹配的,其他2条记录可以跟随。我怎样才能做到这一点?请告知。您需要研究搜索加权算法。没有人可以为您编写算法,这是由您决定什么需要更多的权重 像这样的高级搜索并不简单。有太多的因素(太多,无法列出)取决于你想在搜索中投入多少精力 一个好的开始是使用您正在使用的.NET语言来分割搜索查询中的每个单词。也许你想让第一个词比下一个词更重,下一个词更重,等等 然后决定哪个对搜索更重要。也许
LName
比城市
更重要?如果是这样,当在任一搜索词中找到匹配项时,您可以将列的权重与搜索查询中单词位置的权重相乘
那么对于找到的多个列,您可以将它们添加到一起吗?让它们成倍增长?在相乘之前,是否将LName
权重平方?任何你认为会使重量更精确的东西(只要记住性能)
你可以做任何你想加权每一行的事情,但是当这个算法完成后,你可以简单地
按权重排序把最有可能的行放在最上面并“嘿,普雷斯托” 有点复杂,但作为起点,动态地为OR构建WHERE子句,然后将结果与精确匹配结合起来。还包括一个排序列,例如
SELECT FName, LName, City, 1 AS SortOrder
FROM Users
WHERE
FName = 'Raju' OR
FName = 'Chennai' -- Add the rest of the OR clauses
UNION
SELECT FName, LName, City, 0 AS SortOrder
WHERE FName + ' ' + LName + ' ' + City LIKE '%Raju Chennai%'
ORDER BY SortOrder
我相信,你可以利用全文搜索和复杂的算法。有些数据库管理系统(如MSSQL)有自己的实现,不过你可以使用免费的开源Lucene。嘿,谢谢你的好主意。我会试试看。