我正在使用 SQL Server 2008。我已将
ProductName
表中的 Product
列索引为全文搜索索引。一些 ProductName
值作为示例:
ProductName
-------------
Iphone 3GS
Iphone 4S
Iphone 5S
Iphone 5
现在我使用以下代码来搜索
Product
:
WHERE CONTAINS (Product.ProductName, '"Iphone 4S"')
没关系!但如果我编辑并使用它:
WHERE CONTAINS (Product.ProductName, '"4S Iphone"')
没有结果!
你能帮我解决这个问题吗?谢谢。
你想找出包含Iphone,4S的结果,所以你可以使用OR条件来得到结果。
WHERE CONTAINS (Product.ProductName, '4S OR Iphone')
以下链接将有助于更好地理解。 http://blog.sqlauthority.com/2008/09/05/sql-server-creating-full-text-catalog-and-index/
听起来您需要在 4S 和 Iphone 之间使用 NEAR 运算符。它用这些搜索单词,并且顺序可以是独立的。
WHERE CONTAINS (Product.ProductName, '"4S" NEAR "Iphone"')
您还可以使用波形符 (~) 代替 NEAR 语句
WHERE CONTAINS (Product.ProductName, '"4S" ~ "Iphone"')
各个搜索短语应包含在引号中。
如果您要比较两行的结果,您可能会找到您想要的结果:
WHERE CONTAINS (Product.ProductName, '"Iphone" and "4S"')
WHERE CONTAINS (Product.ProductName, '"4S" and "Iphone"')
这是因为您可能想要搜索涉及空格的组合:
WHERE CONTAINS (Product.ProductName, '"Sweet apple" or "Sour orange" or "Sour apple"')
在这种情况下,您将无法找到甜橙。
重点是不要将您的搜索限制为单个单词,而是实际上允许您根据需要选择不同的单词组合。
聚会有点晚了,不过,想知道是否
自由文本
将解决 OP 的问题,而不是使用 CONTAINS 和 AND/OR,因为 FreeText 需要多个关键字进行搜索。
DECLARE @fullTextCondition NVARCHAR(1000) = '4S Iphone'
SET @fullTextCondition = '"' + REPLACE(@fullTextCondition, ' ', '" And "') + '*"'
SELECT * FROM Product
WHERE CONTAINS(ProductName, @fullTextCondition);
你为什么不去:
product.ProductName like '%3GS%'
product.ProductName like '%4S%'
如果你想更准确的话:
where product.ProductName like '%4S%'
and product.ProductName like '%Iphone%'