Jag*_*agd 6 t-sql full-text-search contains containstable
我在启用了文件流的varchar(max)类型的列上创建了全文索引。文件流包含诸如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'
Run Code Online (Sandbox Code Playgroud)
全文搜索#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'
Run Code Online (Sandbox Code Playgroud)
两次全文搜索之间唯一的显着区别是查询#1使用contains和查询#2使用containstable。
我的问题是两个查询并不总是产生相同的结果。例如,如果我搜索短语“ Independent contractors”,查询#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
Run Code Online (Sandbox Code Playgroud)
查询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
Run Code Online (Sandbox Code Playgroud)
top_n_by_rank指定仅返回排名最高的匹配项(按降序排列)。仅当指定整数值 n 时才适用。如果 top_n_by_rank 与其他参数结合使用,则查询返回的行数可能少于实际匹配所有谓词的行数。
尝试运行 w/oa top 并查看它是否匹配CONTAINS。
| 归档时间: |
|
| 查看次数: |
3058 次 |
| 最近记录: |