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

时间:2010-03-06 11:45:55

标签: sql-server tsql 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

返回的结果集是:

1   dog
2   dogbreed
3   dogbreedinfo
4   dogs

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

修改

还有其他方法我应该搜索其他字符串中包含的字符串吗?比LIKE'%searchword%'更快的方式?

1 个答案:

答案 0 :(得分:5)

仅仅因为MS全文搜索不支持后缀搜索 - 只有前缀,即'* dog *'前面的'*'被忽略。 Books Online btw。

清楚地说明了这一点
  

CONTAINS可以搜索:

     
      
  • 一个单词或短语。
  •   
  • 单词或短语的前缀。
  •   
  • 靠近另一个词的一个词。
  •   
  • 从另一个词中生成的一个词(例如,词驱动器是驱动器,驱动器,驱动器和驱动器的弯曲杆)。
  •   
  • 使用词库的另一个词的同义词(例如,金属词可以包含铝和钢等同义词)。
  •   

前缀术语定义如下:

  

<前缀术语> :: = {“word *”| “短语*”}

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