Signifikanter Unterschied zwischen enthält und CONTAINS?
-
25-09-2019 - |
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
Lösung
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.