假设我在 SQL Server 2012 中有以下架构和数据:
create table Exclamations
(
ID int not null primary key identity(1,1),
Exclamation nvarchar(150) not null
);
insert into Exclamations(Exclamation) values
('Ohmygosh!'),
('Ohmygoodness!'),
('It''sabird!'),
('It''saplane!'),
('Whattheheck!'),
('Lookoutbelow!'),
('Whatintheworld?'),
('Isheforreal?'),
('Takeahike!');
create fulltext index on Exclamations(Exclamation) key index ID;
假设我想对我的感叹词进行全文查询,但我希望能够使用高速索引查询单词中的单词。那可能吗?也许使用自定义词典或自定义分词/边界行为?
例如,我希望能够查询单词“out”并让它快速找到第 6 行(“Lookoutbelow!”),而不必使用类似 LIKE 的运算符扫描所有行。这也意味着一些误报,例如,假设我想查询单词“he”并找到第 8 行('Isheforreal?');该查询还将返回第 5 行('Whattheheck!'),因为它包含相同的“he”子字符串。没关系。
请注意,我不需要分词器来索引每个可能的字符组合。我不介意第 4 行中的“sapl”等无意义的词是否未编入索引。我只需要它来标记它已经识别的单词(可能还有一些我会添加的额外单词,但这只是一个很好的选择。)
重要的是要指定,出于这个问题的目的,我不能在插入 SQL Server 之前预先解析感叹号以插入明显的标记化边界,例如空格、连字符或句点。我想知道 SQL Server 是否能以某种方式自行完成。
编辑:经过更多阅读,我想要的似乎通常称为N-gram 分词。但我希望它仅限于已经作为字典中的单词或单词的变体出现的标记。