Pergunta

Eu tenho um índice de texto completo criado em uma coluna do tipo varchar (max) com o FileStream ativado. O FileStream contém dados como JPG, TIF, PDF e XML (embora isso seja principalmente irrelevante para a pergunta, acredito).

Tenho duas consultas que criei que me permitem pesquisar no índice.

Pesquisa de texto completo #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'

Pesquisa de texto completo #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'

A única diferença significativa entre as duas pesquisas de texto completo é a consulta nº 1, os usos contém e a consulta nº 2 usa o contentStable.

Meu problema é que as duas consultas nem sempre produzem os mesmos resultados. Por exemplo, se eu pesquise na frase "contratados independentes", a consulta nº 1 produzia um conjunto de resultados de 10 documentos diferentes (PDFs e XML), enquanto a consulta nº 2 produziria apenas um conjunto de resultados de 6. Isso parece ser A regra: a consulta nº 1 sempre produz mais alguns que a consulta nº 2, e a consulta nº 2 sempre produz exatamente as mesmas correspondências que a consulta nº 1 faz.

Consulta #1 - Pesquise em "contratados independentes" rendimentos:

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

Consulta #2 - Pesquise em rendimentos de "contratados independentes":

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
Foi útil?

Solução

CONTAINSTABLE:

top_n_by_rank

Especifica que apenas as partidas mais classificadas do NHA, em ordem descendente, são devolvidas. Aplica -se apenas quando um valor inteiro, n, é especificado. Se TOP_N_BY_RANK for combinado com outros parâmetros, a consulta poderá retornar menos linhas do que o número de linhas que realmente correspondem a todos os predicados.

Tente correr com o OA em cima e veja se ele corresponde CONTAINS.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top