我正在尝试使用SQL Server 2008和全文搜索来实现自动完成搜索框(如谷歌)。
假设我有3列我想搜索并创建了正确的索引,而不是。
列是ProductName,ProductNumber和Color ...
对于用户输入,我想在所有三列中搜索可能的匹配项,并建议正确的搜索词。
所以说用户开始输入“Bl”
id喜欢返回单个列的容器结果,例如来自Color列的“Black”“Blue”以及来自其他两列的任何匹配(如ProductNumber:BL2300)
所以基本上我需要搜索多个列并返回一个列作为结果。有没有办法做到这一点?
答案 0 :(得分:4)
更新了op的评论如果您在不同的列上创建了FULLTEXT INDEX,那么您可以简单地使用CONTAINS
或FREETEXT
查看其中一个,所有他们,或其中一些。像这样:
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 + '%'
是一个很好的起点。