搜索多个列的Sql Server全文搜索单个结果列

时间:2011-01-20 14:59:56

标签: sql sql-server tsql sql-server-2008

我正在尝试使用SQL Server 2008和全文搜索来实现自动完成搜索框(如谷歌)。

假设我有3列我想搜索并创建了正确的索引,而不是。

列是ProductName,ProductNumber和Color ...

对于用户输入,我想在所有三列中搜索可能的匹配项,并建议正确的搜索词。

所以说用户开始输入“Bl”

id喜欢返回单个列的容器结果,例如来自Color列的“Black”“Blue”以及来自其他两列的任何匹配(如ProductNumber:BL2300)

所以基本上我需要搜索多个列并返回一个列作为结果。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:4)

更新了op的评论如果您在不同的列上创建了FULLTEXT INDEX,那么您可以简单地使用CONTAINSFREETEXT查看其中一个,所有他们,或其中一些。像这样:

SELECT *
FROM YourTable
WHERE CONTAINS(*, @SearchTerm);

如果要查看FULLTEXT INDEX中包含的所有列。或者:

SELECT *
FROM YourTable
WHERE CONTAINS((ProductName, ProductNumber, Color), @SearchTerm);

如果要指定要搜索的列。 如果您需要在一列中显示结果,则必须执行UNION并搜索要搜索的每个列。

    SELECT *
    FROM YourTable
    WHERE CONTAINS(ProductName, @SearchTerm)
    UNION
    SELECT *
    FROM YourTable
    WHERE CONTAINS(ProductNumber, @SearchTerm)
    UNION 
    SELECT *
    FROM YourTable
    WHERE CONTAINS(Color, @SearchTerm)

答案 1 :(得分:1)

如果您不需要关联单个列,例如

SELECT * FROM Table WHERE ProductName LIKE @SearchTerm + '%'
UNION
SELECT * FROM Table WHERE ProductNumber LIKE @SearchTerm + '%'
UNION
SELECT * FROM Table WHERE Color LIKE @SearchTerm + '%'

是一个很好的起点。