2008-11-25 8 views
6

In den letzten paar Stunden habe ich mit allen Arten von verschiedenen Varianten der SQL Server-Volltextsuche. Allerdings kann ich noch nicht herausfinden, wie das Ranking funktioniert. Ich bin auf ein paar Beispiele gestoßen, die mich wirklich darüber irritieren, wie sie höher sind als andere. Zum BeispielRanking der Volltextsuche (SQL Server)

Ich habe eine Tabelle mit 5 Spalten + mehr, die nicht indiziert sind. Alle sind nvarchar Felder.

ich diese Abfrage leite (Na ja fast .. ich mit verschiedenen Namen abgetippt)

SET @SearchString = REPLACE(@Name, ' ', '*" OR "') --Splits words with an OR between 
SET @SearchString = '"'[email protected]+'*"' 
print @SearchString; 

SELECT ms.ID, ms.Lastname, ms.DateOfBirth, ms.Aka, ms.Key_TBL.RANK, ms.MiddleName, ms.Firstname 
FROM View_MemberSearch as ms 
INNER JOIN CONTAINSTABLE(View_MemberSearch, (ms.LastName, ms.Firstname, ms.MiddleName, ms.Aka, ms.DateOfBirth), @SearchString) AS KEY_TBL 
    ON ms.ID = KEY_TBL.[KEY] 
WHERE KEY_TBL.RANK > 0 
ORDER BY KEY_TBL.RANK DESC; 

Also wenn ich für 1964.11.05 John Jackson suchen Ich würde „5.11 erhalten/1964" OR "JOHN *" OR "JACKSON *" und diese Ergebnisse:

ID -- First Name -- Middle Name -- Last Name -- AKA -- Date of Birth -- SQL Server RANK 
---------------------------------------------------------------------------------- 
1 | DAVE  | JOHN  | MATHIS  | NULL | 11/23/1965 | 192 
2 | MARK  | JACKSON  | GREEN  | NULL | 05/29/1998 | 192 
3 | JOHN  | NULL  | JACKSON | NULL | 11/05/1964 | 176 
4 | JOE  | NULL  | JACKSON | NULL | 10/04/1994 | 176 

So endlich meine Frage. Ich sehe nicht, wie Zeile 1 und 2 über Zeile 3 stehen und warum Zeile 3 gleichrangig ist wie Zeile 4. Zeile 2 sollte den höchsten Rang haben, da die Suchzeichenfolge auch mit Vorname und Nachname übereinstimmt als das Geburtsdatum.

Wenn ich das OR zu UND ändere, bekomme ich keine Ergebnisse.

Antwort

6

Ich habe festgestellt, AND und OR-Klauseln don‘ t gilt für mehrere Spalten. Erstellen Sie eine indizierte Sicht, die die Spalten zusammenführt, und Sie erhalten bessere Ergebnisse. Schau dir meine vergangenen Fragen an und du wirst Informationen finden, die zu deinem Szenario passen.

Ich habe auch gefunden, dass ich besser dran bin, kein '*' anzuhängen. Ich dachte, es würde mehr Matches ergeben, aber es tendierte dazu, schlechtere Ergebnisse zu liefern (besonders für lange Wörter). Als Mittelweg können Sie nur ein * an längere Wörter anhängen.

Das Beispiel, das Sie geben, ist auf jeden Fall seltsam.

+0

wie die Spalten zusammenführen und genau verwenden?Ich habe das gleiche Problem. – zsharp

+0

Ist es besser, eine berechnete Spalte zu haben und einen Volltextindex für diese Spalte zu haben, als in separaten Spalten suchen zu müssen? – user636525

1

Was passiert, wenn Sie die DoB-Kriterien entfernen?

MS Volltextsuche ist wirklich wirklich eine Blackbox, die Sie und fertigen Sie ziemlich viel nehmen es wie es ist schwer zu verstehen ist, im Gegensatz zu Lucene ist groß, die individuell gestaltet

1

Danke Jungs.

Frank Sie waren richtig, dass UND und ODER nicht über Spalten gehen, das war etwas, das ich zuerst nicht bemerkt habe.

Um die besten Ergebnisse zu erhalten, musste ich alle 5 Spalten in 1 Spalte in einer Ansicht zusammenführen. Suchen Sie dann in dieser einzelnen Spalte. Dies gab mir die genauen Ergebnisse, die ich ohne Extras haben wollte.

Mein eigentlicher Such-String nach der Umwandlung endete „Wort1 *“ und „* Wort2“ ist bis

das% -Zeichen Mit immer noch nicht tun, was Msdn sagte, es tun soll. Das heißt, wenn ich nach dem Wort Josh suchte und es in "Josh%" geändert wurde, als ich suchte, dann würde "Joshua" nicht gefunden werden. Ziemlich blöd aber mit "Josh *" wäre dann Joshua zu finden.