使用sql和asp.net进行高级搜索查询

时间:2011-11-07 12:59:36

标签: asp.net sql search

我有一个表[Users],其中FName,LName和City为3列。我想实现一个搜索算法,该算法来自3列,其顶部是AND,并且附加了ORed结果。

例如:

  1. Raju Ram Bangalore
  2. Ram Raju Hyderabad
  3. Krishna Raju Chennai
  4. 当我搜索 Raju Chennai 时,它会导致所有 3 记录第3记录在顶部,因为它是完全匹配的其他2可以遵循。我怎样才能做到这一点?请指教。

3 个答案:

答案 0 :(得分:1)

您需要查看搜索加权算法。没有人可以为你编写你的算法,这是你决定什么需要更多权重。

此类高级搜索并不简单。有很多因素(列出的数量太多)取决于您希望在搜索中投入多少精力。

一个良好的开端将是使用您使用的任何.NET语言来分割搜索查询中的每个单词。也许你想要比第一个单词更重要,然后是下一个单词,等等?

然后决定哪个对搜索更重要。也许LNameCity更重要?如果是这样,当在任一搜索词中找到匹配时,您可以将列的权重乘以搜索查询中词的位置权重。

然后,对于找到的多个列,您可以将它们一起添加?乘以他们?在乘法之前,可能将LName重量平方?你认为的任何东西都会使重量更准确(只记住表现)。

你可以做任何你想要对每一行加权的事情,但是当这个算法完成后,你可以简单地ORDER BY Weight将最可能的行放在顶部并“嘿presto”!

答案 1 :(得分:0)

有点繁琐,但作为起点,动态建立OR的WHERE子句,然后UNION结果与完全匹配。还包括一个排序列,例如

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

答案 2 :(得分:0)

我相信,您可以使用复杂算法的全文搜索。有些DBMS(如MSSQL)有自己的实现,但你可以使用免费的开源Lucene。