sql server 中的全文搜索

问题描述 投票:0回答:6

我正在使用 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"')

没有结果!

你能帮我解决这个问题吗?谢谢。

sql sql-server full-text-search
6个回答
6
投票

你想找出包含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/


2
投票

听起来您需要在 4SIphone 之间使用 NEAR 运算符。它用这些搜索单词,并且顺序可以是独立的。

WHERE CONTAINS (Product.ProductName, '"4S" NEAR "Iphone"')

您还可以使用波形符 (~) 代替 NEAR 语句

WHERE CONTAINS (Product.ProductName, '"4S" ~ "Iphone"')

1
投票

各个搜索短语应包含在引号中。

如果您要比较两行的结果,您可能会找到您想要的结果:

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"')

在这种情况下,您将无法找到甜橙。

重点是不要将您的搜索限制为单个单词,而是实际上允许您根据需要选择不同的单词组合。


0
投票

聚会有点晚了,不过,想知道是否

自由文本

将解决 OP 的问题,而不是使用 CONTAINS 和 AND/OR,因为 FreeText 需要多个关键字进行搜索。


0
投票
DECLARE @fullTextCondition NVARCHAR(1000) = '4S Iphone'
 SET @fullTextCondition = '"' + REPLACE(@fullTextCondition, ' ', '" And "') + '*"'
SELECT * FROM Product
WHERE CONTAINS(ProductName, @fullTextCondition);

-4
投票

你为什么不去:

 product.ProductName like '%3GS%'
 product.ProductName like '%4S%'

如果你想更准确的话:

 where product.ProductName like '%4S%'
       and product.ProductName like '%Iphone%'
© www.soinside.com 2019 - 2024. All rights reserved.