Frage

Ich habe einen Volltextindex auf eine Spalte vom Typ varchar (max) mit Filestream erstellt aktiviert. Die Filestream enthält Daten wie JPGs, TIF ist, PDF-Dateien und XML ist (obwohl dies meist unerheblich für die Frage ist, glaube ich).

Ich habe zwei Abfragen, die ich erstellt habe, die mir erlauben, auf den Index zu durchsuchen.

Volltextsuche # 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'

Volltextsuche # 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'

Der einzige wesentliche Unterschied zwischen den beiden Volltextsuche ist Abfrage # 1 verwendet enthält und Abfrage # 2 verwendet CONTAINS.

Mein Problem ist, dass die beiden Abfragen die gleichen Ergebnisse nicht immer ergeben. Zum Beispiel gab mich auf dem Begriff „Freie Dienstnehmerinnen“, Abfrage # 1 ergeben würde eine Ergebnismenge von 10 verschiedenen Dokumenten (PDF-Dateien und XML ist) zu suchen, während Abfrage # 2 nur eine Ergebnismenge von 6 ergeben würde Dies scheint zu sein, die Regel: Abfrage # 1 ergibt immer ein paar mehr als Abfrage # 2 und # Abfrage 2 liefert immer die exakt gleichen Matches die Abfrage # 1 der Fall ist.

Abfrage # 1 - Suche nach "Freie Dienstnehmer" ergibt:

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

Abfrage # 2 - Suche nach "Freie Dienstnehmer" ergibt:

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
War es hilfreich?

Lösung

CONTAINSTABLE :

  

top_n_by_rank

     

Gibt an, dass nur die nhighest Streichhölzer Platz, in absteigender Reihenfolge,   zurückgegeben. Gilt nur, wenn ein   Integerwert, n, angegeben wird. Wenn   top_n_by_rank mit anderen kombiniert   Parameter könnte die Abfrage zurückgeben   weniger Zeilen als die Anzahl der Zeilen   dass passen eigentlich alle die   Prädikate.

Versuchen Sie w / o Top laufen und sehen, ob es CONTAINS entspricht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top