Pregunta

Tengo un índice de texto creado sobre una columna de tipo varchar (max) con filestream habilitado. El filestream contiene datos tales como JPG de, TIF, PDF y XML de (aunque esto es sobre todo irrelevante para la cuestión, creo).

Tengo dos consultas que he creado que me permiten para buscar en el índice.

buscar

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'
buscar

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'

La única diferencia significativa entre las dos búsquedas de texto completo es la consulta # 1 contiene usos y consulta # 2 usos CONTAINSTABLE.

Mi problema es que las dos consultas no siempre producen los mismos resultados. Por ejemplo, si yo fuera a buscar la frase "contratistas independientes", consulta # 1 produciría un conjunto de resultados de 10 documentos diferentes (PDF y XML de), mientras que la consulta # 2 sólo se produciría un conjunto de resultados de 6. Esto parece ser la regla: la consulta # 1 siempre produce un poco más de la consulta # 2, # 2 y consulta siempre produce exactamente los mismos partidos que consulta # 1 hace.

Consulta # 1 - búsqueda en "contratistas independientes" se obtiene:

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 - búsqueda en "contratistas independientes" se obtiene:

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
¿Fue útil?

Solución

CONTAINSTABLE :

  

top_n_by_rank

     

Especifica que sólo el nhighest partidos igualados, en orden descendente,   son devueltos. Sólo se aplica cuando una   número entero de valor, n, se especifica. Si   top_n_by_rank se combina con otro   parámetros, la consulta podría volver   un menor número de filas que el número de filas   que de hecho coincidir con toda la   predicados.

Trate de correr w / o una parte superior y ver si coincide con CONTAINS.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top