6

ファイルストリームが有効になっている varchar(max) 型の列に作成されたフルテキスト インデックスがあります。ファイルストリームには、JPG、TIF、PDF、XML などのデータが含まれています (ただし、これは質問とはほとんど関係がないと思います)。

インデックスを検索できるように作成したクエリが 2 つあります。

全文検索 #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'

2 つの全文検索の唯一の重要な違いは、クエリ #1 が contains を使用し、クエリ #2 が containstable を使用していることです。

私の問題は、2 つのクエリが常に同じ結果をもたらすとは限らないことです。たとえば、「独立請負業者」という語句を検索すると、クエリ #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
4

1 に答える 1

3

CONTAINSTABLE:

top_n_by_rank

降順で n 番目にランク付けされた一致のみが返されるように指定します。整数値 n が指定されている場合にのみ適用されます。top_n_by_rank が他のパラメーターと組み合わされている場合、クエリは、すべての述語に実際に一致する行数よりも少ない行を返す可能性があります。

トップなしで実行してみて、一致するかどうかを確認してくださいCONTAINS

于 2010-11-17T19:05:04.753 に答える