SQL Server全文搜索和空格

时间:2016-05-24 07:23:44

标签: sql sql-server search text

我有一个带有产品名称的专栏。有些名字看起来像'ab-cd''ab cd' 当用户输入'abc'(没有空格)时,是否可以使用全文搜索来获取这些名称? like运算符正在为我工​​作,但我想知道是否可以使用全文搜索。

3 个答案:

答案 0 :(得分:1)

不,遗憾的是你不能通过全文进行搜索。在这种情况下,您只能使用LIKE LIKE ('ab%c%')

<强> EDIT1:

您可以创建一个视图(WITH SCHEMABINDING!),其中包含您要搜索的id和列名称:

CREATE VIEW dbo.ftview WITH SCHEMABINDING 
AS
SELECT  id,
        REPLACE(columnname,' ','') as search_string
FROM YourTable

然后创建索引

CREATE UNIQUE CLUSTERED INDEX UCI_ftview ON dbo.ftview (id ASC)

然后在search_string字段上创建全文搜索索引。

之后,您可以使用CONTAINS搜索运行"abc*"查询,它会找到您需要的内容。

<强> EDIT2:

但如果search_string没有以您的搜索字词开头,它就无济于事。

例如:

ab c d - &gt; abcd 并搜索cd

答案 1 :(得分:1)

没有。全文搜索基于词语和短语。它不存储原始文本。事实上,根据配置,它甚至不会存储所有单词 - 所谓的停用词永远不会进入索引。例如:在英语中,“in”这个词的选择性不足以被认为值得存储。

  

有些名字看起来像'ab-cd''ab cd'

那些可能根本没有存储。至少第二个例子实际上是2个非常短的单词 - 很可能它们完全被忽略了。

所以,没有 - 全文搜索不适合这个。

答案 2 :(得分:1)

如果您想使用FTS查找彼此相邻的字词,例如用空格分隔的字词,则应使用邻近词。

您可以使用搜索词组as documented here中的NEAR关键字或~运算符来定义邻近词。

因此,如果您想立即找到ab后跟cd,您可以使用表达式,

'NEAR((ab,cd), 0)'

搜索单词ab后跟单词cd,其中包含0个字词。