非常基本的问题,但我怎样才能让containstable
搜索进行实际的“包含”搜索,而不是“开始于”搜索?
例如,从文档中的示例:
CREATE TABLE Flags (Country nvarchar(30) NOT NULL, FlagColors varchar(200));
CREATE UNIQUE CLUSTERED INDEX FlagKey ON Flags(Country);
INSERT Flags VALUES ('France', 'Blue and White and Red');
INSERT Flags VALUES ('Italy', 'Green and White and Red');
INSERT Flags VALUES ('Tanzania', 'Green and Yellow and Black and Yellow and Blue');
SELECT * FROM Flags;
GO
CREATE FULLTEXT CATALOG TestFTCat;
CREATE FULLTEXT INDEX ON Flags(FlagColors) KEY INDEX FlagKey ON TestFTCat;
GO
SELECT * FROM Flags;
SELECT * FROM CONTAINSTABLE (Flags, FlagColors, 'Green') ORDER BY RANK DESC;
SELECT * FROM CONTAINSTABLE (Flags, FlagColors, 'Green or Black') ORDER BY RANK DESC;
工作正常,也是如此:
SELECT * FROM CONTAINSTABLE (Flags, FlagColors, '"Gree*"') ORDER BY RANK DESC;
但这不会:
SELECT * FROM CONTAINSTABLE (Flags, FlagColors, '"*reen"') ORDER BY RANK DESC;
SELECT * FROM CONTAINSTABLE (Flags, FlagColors, '"*reen*"') ORDER BY RANK DESC;
我应该使用不同的查询,还是我正在寻找的东西是不可能的?
我认为,在 SQL Server 中进行全文搜索时,这是一个常见的误解。
全文搜索可以搜索整个单词以及许多其他内容。从
CONTAINS
文档因此,就像文本字符串的普通索引一样,您可以进行前缀搜索。
全文搜索和普通 SQL Server 索引都不支持在单词或文本字符串中进行“后缀”或“包含”搜索。所以基本上没有前导通配符。
请注意,同样的限制适用于
CONTAINSTABLE
:我想这些限制的存在是因为索引在 SQL Server 中的逻辑存储方式——作为 b 树,根据索引列。