我有一个问题,在容器中"blah“和"blah*”有什么不同?下面是我的背景。
create table testWildcard(pk int identity constraint twpk primary key, displayName varchar(100))
GO
create fulltext catalog test12 as default
GO
create fulltext index on testWildcard(displayName) key index twpk
GO
insert into testWildcard(displayName) values('blahBlahBlah')
insert into testWildcard(displayName) values('blah<bold>Blah</bold>Blah')
insert into testWildcard(displayName) values('blah Blah Blah')
GO
当使用"blah*“作为关键字搜索时,结果是3条记录。
select * from testWildcard t
inner join CONTAINSTABLE(testWildcard, *, '"blah*"', LANGUAGE 1033) as w on t.pk=w.[Key]
results:
pk displayName Key RANK
1 blahBlahBlah 1 16
2 blah<bold>Blah</bold>Blah 2 48
3 blah Blah Blah 3 48
当使用"blah“作为关键字进行搜索时,结果是2条记录。
select * from testWildcard t
inner join CONTAINSTABLE(testWildcard, *, '"blah"', LANGUAGE 1033) as w on t.pk=w.[Key]
resuts:
pk displayName Key RANK
2 blah<bold>Blah</bold>Blah 2 48
3 blah Blah Blah 3 48
然后利用系统函数sys.dm_fts_parser对关键词进行分析,两者没有任何区别。我搜索它,但我仍然找不到正确的答案。
SELECT * FROM sys.dm_fts_parser ('"blah"', 1033, 0, 0)
SELECT * FROM sys.dm_fts_parser ('"blah*"', 1033, 0, 0)
result:
keyword group_id phrase_id occurrence special_term display_term expansion_type source_term
0x0062006C00610068 1 0 1 Exact Match blah 0 blah
谢谢。
发布于 2015-11-19 21:01:25
FTS中的Star(*)用于通配符,与普通查询的概念相同。
因此,当您搜索blah
时,它会搜索blah
附带的单词。当您使用blah*
时,它会搜索以blah
开头的单词,不管之后写的是什么。
如果你用*blah
搜索,它会搜索结束词blah
的位置。
现在,您的问题是为什么blahBlahBlah
条目不是第一次搜索,根据msdn,原因不是这些:(意思是只搜索已知单词的简单术语,而不是我们创建的任何单词)
包含可以搜索: 单词或短语。一个词或短语的前缀。一个接近另一个词的词。一个词是从另一个词产生的(例如,单词驱动器是驱动器、驱动器、驱动和驱动的拐弯抹角)。使用同义词库的另一个词的同义词(例如,“金属”一词可以有“铝”和“钢”等同义词)。
https://technet.microsoft.com/en-us/library/cc879300%28v=sql.105%29.aspx
发布于 2015-11-19 21:01:38
如果使用sys.dm_fts_index_keywords
查看索引的内容列表
SELECT display_term, column_id, document_count
FROM sys.dm_fts_index_keywords(DB_ID('DatabaseName'), OBJECT_ID('testWildcard'))
你会看到еркуу的话:废话,废话,大胆。
这意味着在创建全文索引时,空格、<
和>
“打断”了一个单词。
现在,当您按"blah“进行搜索时,CONTAINS
只返回包含单词blah
的字符串。
当您添加通配符*
时,通过"blah*“CONTAINS
搜索返回所有包含单词的字符串,从blah
开始。
https://stackoverflow.com/questions/33819013
复制