代码之家  ›  专栏  ›  技术社区  ›  Jan Gressmann

SQL查询-跨多个字段搜索

  •  3
  • Jan Gressmann  · 技术社区  · 17 年前

    我正在尝试实现一个搜索,您可以输入多个搜索词来形成一个和条件。它还应该在数据库的不同字段中进行搜索。


    当你进入的时候,你会感到惊讶 ,你应该在哪里找到一张唱片 名称 比赛 账单 比赛 西雅图 . 你不应该在只有 比赛 西雅图 .

    这听起来并不复杂,但似乎比我想象的要难。我想出了这样的办法:

    SELECT * FROM ADDRESS WHERE
    ((NAME LIKE 'Bill%') OR (NAME LIKE 'Seattle%')) 
    AND
    ((CITY LIKE 'Bill%') OR (CITY LIKE 'Seattle%'))
    

    这在前面的例子中效果很好,但假设我们添加另一个字段:

    SELECT * FROM ADDRESS WHERE
    ((NAME LIKE 'Bill%') OR (NAME LIKE 'Seattle%')) 
    AND
    ((CITY LIKE 'Bill%') OR (CITY LIKE 'Seattle%'))
    AND
    ((COMPANY LIKE 'Bill%') OR (COMPANY LIKE 'Seattle%'))
    

    现在它不会返回所需的结果。 我最需要(我想)的是一种方法来确定一个子条件

     ((COMPANY LIKE 'Bill%') OR (COMPANY LIKE 'Seattle%'))
    

    返回一些内容,如果没有,我需要忽略该条件。

    顺便说一句,我用的是MSSQL'05。

    3 回复  |  直到 17 年前
        1
  •  12
  •   Can Berk Güder Pugalmuni    17 年前

    首先,我不知道它是如何在MSSQL上实现的,但您可能想看看全文搜索。

    SELECT * FROM ADDRESS WHERE
    ((NAME LIKE 'Bill%') OR (CITY LIKE 'Bill%') OR (COMPANY LIKE 'Bill%'))
    AND
    ((NAME LIKE 'Seattle%') OR (CITY LIKE 'Seattle%') OR (COMPANY LIKE 'Seattle%'))
    
        2
  •  4
  •   REA_ANDREW    17 年前

    全文索引允许您同时使用CONTAINSTABLE和CONATASTABLE,这在您需要的情况下非常强大。

        3
  •  0
  •   Guðmundur H    17 年前

    如果你想把这件事做好,那将是非常困难的。在理想情况下,您的程序可以查看每个关键字并确定其含义,从而确定它应该匹配的列。但这需要一些巧妙的自然语言识别。

    您搜索“Bill Seattle”的示例需要程序将“Bill”标识为人名的一部分,将“Seattle”标识为城市名。一个简单的做法是建立所有已知城市的列表,并在那里查找关键字,如果找到,将它们标记为城市名称。你可以为公司做同样的事情,然后考虑所有看起来既不像城市也不是公司的关键词。使用这种分类构建SQL查询应该很容易。

    the example parser 从OpenCalais项目中,我推荐一种简单的方法:

    推荐文章