SQL Server 中的全文搜索

9

我正在使用SQL Server 2008。我已经将Product表中的ProductName列建立为全文搜索索引。以下是一些ProductName值的示例:

ProductName
-------------
Iphone 3GS
Iphone 4S
Iphone 5S
Iphone 5

现在我正在使用以下代码搜索 Product :
WHERE CONTAINS (Product.ProductName, '"Iphone 4S"')

没问题!但如果我编辑并使用这个:

没问题!但如果我编辑并使用这个:

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

没有结果!

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


https://learn.microsoft.com/en-us/sql/relational-databases/search/full-text-search?view=sql-server-2017 - Channa
5个回答

6

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

虽然有点晚了,但是我想知道:

FreeText

是否可以解决原帖中的问题,而不是使用CONTAINS和AND/OR,因为FreeText可以使用多个关键词进行搜索。


-4

为什么不选择:

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

如果你想更加准确的话,那么:

 where product.ProductName like '%4S%'
       and product.ProductName like '%Iphone%'

5
针对数百万行文本数据的LIKE查询可能需要几分钟才能返回结果;而使用全文检索查询相同的数据,根据返回的行数不同,可能只需要几秒钟甚至更短的时间就可以得到结果。 - Mehmood
尽管Mehmood的评论应该是一个重要问题,使用LIKE来查询数百万行数据时,对目标列进行索引并防止用户在搜索表达式的开头使用%应该是一种选择。我的意思是SearchExpr%是索引友好型的,而%SearchExpr%则不是,因此无法通过查询引擎进行优化。 - Julio Nobre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接