Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用sql和asp.net的高级搜索查询_Asp.net_Sql_Search - Fatal编程技术网

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

使用sql和asp.net的高级搜索查询,asp.net,sql,search,Asp.net,Sql,Search,我有一个表[Users],其中FName、LName和City为3列。我想实现一个搜索算法,该算法从3列中搜索结果,并在其顶部添加AND和OR结果 例如: 拉朱·拉姆·班加罗尔 拉姆·拉朱·海得拉巴 克里希纳·拉朱·钦奈 当我搜索Raju Chennai时,应该会得到所有3记录,上面有3条记录,因为这是完全匹配的,其他2条记录可以跟随。我怎样才能做到这一点?请告知。您需要研究搜索加权算法。没有人可以为您编写算法,这是由您决定什么需要更多的权重 像这样的高级搜索并不简单。有太多的因素(太多,无法列

我有一个表[Users],其中FName、LName和City为3列。我想实现一个搜索算法,该算法从3列中搜索结果,并在其顶部添加AND和OR结果

例如:

  • 拉朱·拉姆·班加罗尔
  • 拉姆·拉朱·海得拉巴
  • 克里希纳·拉朱·钦奈

  • 当我搜索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。

    嘿,谢谢你的好主意。我会试试看。