我有一个表[Users],其中FName,LName和City为3列。我想实现一个搜索算法,该算法来自3列,其顶部是AND,并且附加了ORed结果。
例如:
当我搜索 Raju Chennai 时,它会导致所有 3 记录第3记录在顶部,因为它是完全匹配的其他2可以遵循。我怎样才能做到这一点?请指教。
答案 0 :(得分:1)
您需要查看搜索加权算法。没有人可以为你编写你的算法,这是你决定什么需要更多权重。
此类高级搜索并不简单。有很多因素(列出的数量太多)取决于您希望在搜索中投入多少精力。
一个良好的开端将是使用您使用的任何.NET语言来分割搜索查询中的每个单词。也许你想要比第一个单词更重要,然后是下一个单词,等等?
然后决定哪个对搜索更重要。也许LName
比City
更重要?如果是这样,当在任一搜索词中找到匹配时,您可以将列的权重乘以搜索查询中词的位置权重。
然后,对于找到的多个列,您可以将它们一起添加?乘以他们?在乘法之前,可能将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。