【发布时间】:2018-11-11 08:33:30
【问题描述】:
我正在使用 SQL Server 2016,遇到了一个非常奇怪的行为。
我有一个为 FTS 编制索引的表。
在像 ... CONTAINS(N'"a*"') 这样按单个字符搜索时,它会返回包含从 a 开始的单词的所有记录 - 好吧。
但是,如果我像 ... CONTAINS(N'"n*"') 这样按单个字符 n 进行搜索,它会返回 不仅 包含从 n 开始的单词的记录,而且还包含 digits。
我无法谷歌没有提到这种行为。我相信这是一种通配符,但文档中对此没有任何内容。
为什么会这样?有转义序列之类的吗?
UPD:测试环境
CREATE FULLTEXT CATALOG [ContentCatalog] WITH ACCENT_SENSITIVITY = ON
GO
CREATE TABLE [dbo].[Content]([id] [uniqueidentifier] NOT NULL, [content] [nvarchar](max) NOT NULL,
CONSTRAINT [PK_Content] PRIMARY KEY CLUSTERED ([id] ASC))
GO
ALTER TABLE [dbo].[Content] ADD CONSTRAINT [DF_Content_id] DEFAULT (newid()) FOR [id]
GO
INSERT [Content] ([content]) VALUES
(N'abc def nop'),
(N'zxc asd qwe'),
(N'zaq nhy bgt'),
(N'123 456 789'),
(N'z12 x34 c56')
GO
CREATE FULLTEXT INDEX ON [Content]([content] LANGUAGE 'English')
KEY INDEX [PK_Content]ON ([ContentCatalog], FILEGROUP [PRIMARY])
WITH (CHANGE_TRACKING = AUTO, STOPLIST = SYSTEM)
SELECT * FROM [dbo].[Content]
SELECT FULLTEXTSERVICEPROPERTY('IsFullTextInstalled') -- should be 1
SELECT * FROM [dbo].[Content] WHERE CONTAINS([Content], N'"a*"') -- returns 2 records
SELECT * FROM [dbo].[Content] WHERE CONTAINS([Content], N'"n*"') -- returns extra record with digits only
【问题讨论】:
-
您能否包含一个脚本来创建一个复制此环境供我们测试的环境?由于在我能找到的任何地方都没有提到这一点,我认为您的设置中还有其他原因导致了这种行为。
-
@iamdave 更新帖子
-
谢谢,不过您还需要编写全文索引和目录等。
-
@iamdave 已更新。 FTS 设置为默认设置
标签: tsql full-text-search contains sql-server-2016