我的全文搜索查询有什么问题?

Nat*_*ley 4 t-sql sql-server full-text-search

我对全文CONTAINS运算符有些麻烦.这是一个快速的脚本来展示我正在做的事情.请注意,WAITFOR行只需提供全文索引,以便完成填充.

create table test1 ( id int constraint pk primary key, string nvarchar(100) not null );
insert into test1 values (1, 'dog')
insert into test1 values (2, 'dogbreed')
insert into test1 values (3, 'dogbreedinfo')
insert into test1 values (4, 'dogs')
insert into test1 values (5, 'breeds')
insert into test1 values (6, 'breed')
insert into test1 values (7, 'breeddogs')

go
create fulltext catalog cat1
create fulltext index on test1 (string) key index pk on cat1
waitfor delay '00:00:03' 
go
select * from test1 where contains (string, '"*dog*"')

go
drop table test1
drop fulltext catalog cat1
Run Code Online (Sandbox Code Playgroud)

返回的结果集是:

1   dog
2   dogbreed
3   dogbreedinfo
4   dogs
Run Code Online (Sandbox Code Playgroud)

为什么记录#7'种犬'没有归还?

编辑

有没有其他方法我应该搜索其他字符串中包含的字符串?一种比LIKE'%searchword%'快的方法?

Ale*_*exS 5

仅仅因为MS全文搜索不支持后缀搜索 - 只有前缀,即'*dog*'前面的'*'被忽略.它在联机丛书中明确说明.

CONTAINS可以搜索:

  • 一个单词或短语.
  • 单词或短语的前缀.
  • 另一个词附近的一个词.
  • 从另一个词中生成的一个词(例如,词驱动器是驱动器,驱动器,驱动器和驱动器的屈折杆).
  • 一个单词,是使用同义词库的另一个单词的同义词(例如,单词metal可以包含同义词,如铝和钢).

前缀术语定义如下:

<prefix term> :: = {"word*"| "短语*"}

所以,遗憾的是:没有办法在全文搜索中发出LIKE搜索.