显著差异之间包含和CONTAINSTABLE?
-
25-09-2019 - |
题
我与FILESTREAM在类型为varchar(最大)的列创建的全文索引启用。该FILESTREAM包含如JPG文件,TIF的,PDF的,和XML的(虽然这主要是风马牛不相及的问题,我相信)。
数据我有两个疑问,我已经创建了一个让我在索引搜索。
全文检索#1 -
select
parentObj.ObjectID as 'GroupingID',
parentObj.Name as 'Grouping',
childObj.ObjectID as 'FileObjID',
childObj.Name as 'FileName',
fs.FileStreamID
from dbo.dat_FileStream fs
inner join dbo.dat_Object childObj
on fs.ObjectID = childObj.ObjectID
inner join dbo.dat_Collection c
on fs.ObjectID = c.ObjectID
inner join dbo.dat_Object parentObj
on c.ParentID = parentObj.ObjectID
where contains(FileStreamData, @srchTerm)
and parentObj.ObjectTypeID = 1
ORDER BY 'Grouping'
全文检索#2 -
select
KEY_TBL.RANK,
parentObj.ObjectID as 'GroupingID',
parentObj.Name as 'Grouping',
childObj.ObjectID as 'FileObjID',
childObj.Name as 'FileName',
fs.FileStreamID
from dbo.dat_FileStream fs
inner join containstable(dbo.dat_FileStream, FileStreamData, @srchTerm, 1000) as KEY_TBL
on fs.FileStreamID = KEY_TBL.[KEY]
inner join dbo.dat_Object childObj
on fs.ObjectID = childObj.ObjectID
inner join dbo.dat_Collection c
on fs.ObjectID = c.ObjectID
inner join dbo.dat_Object parentObj
on c.ParentID = parentObj.ObjectID
where parentObj.ObjectTypeID = 1
ORDER BY 'Grouping'
两个全文搜索之间的唯一差别显著是查询#1的用途和包含查询#2的用途CONTAINSTABLE。
我的问题是,这两个查询并不总是产生相同的结果。例如,假如我要搜索的短语“独立承包商”,查询#1将产生一个结果集的10个不同的文件(PDF文件和XML的),而查询#2只产生一个结果集的6.这似乎是规则:查询#1总是得到一些超过查询#2,#查询2总是产生完全相同的匹配该查询#1一样。
查询#1 - 在 “独立承包商” 产量搜索:
4262 AAA-00-12 4561 AAA-00-12.pdf 4235
4316 AAA-00-15 4753 AAA-00-15.pdf 4427
4316 AAA-00-15 4754 AAA-00-15.xml 4428
3873 AAA-00-19 4784 AAA-00-19.pdf 4458
3903 AAA-00-22 6795 AAA-00-22.pdf 6459
3953 AAA-00-24 6899 AAA-00-24.pdf 6563
3953 AAA-00-24 6900 AAA-00-24.xml 6564
4842 AAA-00-9 4905 AAA-00-9.pdf 4577
4842 AAA-00-9 4906 AAA-00-9.xml 4578
4057 AAA-0001 4260 AAA-0001.pdf 3936
查询#2 - “独立承包商” 产量搜索:
19 4262 AAA-00-12 4561 AAA-00-12.pdf 4235
126 4316 AAA-00-15 4754 AAA-00-15.xml 4428
126 4316 AAA-00-15 4753 AAA-00-15.pdf 4427
116 3873 AAA-00-19 4784 AAA-00-19.pdf 4458
125 3903 AAA-00-22 6795 AAA-00-22.pdf 6459
57 3953 AAA-00-24 6900 AAA-00-24.xml 6564
57 3953 AAA-00-24 6899 AAA-00-24.pdf 6563
解决方案
top_n_by_rank
指定只nhighest排名的匹配,以降序 返回。只适用于当 整数值,n,被指定。 如果 TOP_N_BY_RANK与其它组合 参数,查询可能返回 比的行数较少的行 实际匹配所有 谓词。强>
尝试运行的w / o顶部,看看它是否匹配CONTAINS
。
不隶属于 StackOverflow