Question

J'ai un index de texte intégral créé sur une colonne de type varchar (max) avec filestream activé. Le filestream contient des données telles que JPG de, TIF de, les PDF et XML de (bien que ce soit la plupart du temps rien à voir avec la question, je crois).

J'ai deux questions que j'ai créé qui me permettent d'effectuer des recherches sur l'indice.

Recherche plein texte # 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'

Recherche plein texte # 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 seule différence significative entre les deux recherches en texte intégral est la requête # 1 contient des utilisations et requête # 2 utilise CONTAINSTABLE.

Mon problème est que les deux requêtes ne donnent pas toujours les mêmes résultats. Par exemple, si je recherche sur l'expression « entrepreneurs indépendants », requête n ° 1 produirait un jeu de résultats de 10 différents documents (format PDF et XML pour), alors que la requête n ° 2 produirait seulement un ensemble de résultat de 6. Cela semble être la règle: requête n ° 1 donne toujours un peu plus que la requête n ° 2, et la requête n ° 2 donne toujours les mêmes correspondances exactes que la requête n ° 1 fait.

Requête # 1 - recherche sur "entrepreneurs indépendants", on obtient:

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

Requête # 2 - recherche sur "entrepreneurs indépendants", on obtient:

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
Était-ce utile?

La solution

CONTAINSTABLE :

  

top_n_by_rank

     

Indique que seuls les matchs classés nhighest, dans l'ordre décroissant,   sont retournés. S'applique uniquement lorsqu'une   valeur nombre entier, n, est spécifié. Si   top_n_by_rank est combiné avec d'autres   paramètres, la requête pourrait revenir   moins de lignes que le nombre de lignes   qui correspondent en fait tous les   prédicats.

Essayez d'exécuter w / o un haut et voir si elle correspond à CONTAINS.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top