Frage

Wir verwenden SQL Server 2005 in einem Projekt. Die Benutzer des Systems haben die Möglichkeit, einige Objekte zu suchen, indem Sie ‚Keywords‘ verwenden. Die Art, wie wir dies umzusetzen ist durch eine Volltextkatalog für die wesentlichen Spalten in jeder Tabelle erstellen, die diese ‚Keywords‘ enthalten und enthält dann unter Verwendung von für die Keywords, die Benutzereingaben in dem Suchfeld in diesem Index zu suchen.

So, zum Beispiel, sagen wir Sie das Filmobjekt haben, und Sie möchten die Benutzer Suche nach Schlüsselwörtern im Titel und Körper des Artikels lassen, dann würden wir Index sowohl den Titel und Plot Spalte, und dann tun so etwas wie:

SELECT * FROM Movies WHERE CONTAINS(Title, keywords) OR CONTAINS(Plot, keywords)

(Es ist eigentlich ein bisschen weiter fortgeschritten ist als das, aber nichts schrecklich komplex)

Einige Benutzer hinzufügen Zahlen zu ihrer Suche, so zum Beispiel wollen sie ‚Terminator 2‘ zu finden. Das Problem hier ist, dass, soweit ich weiß, von Standard-SQL-Server wird nicht kurze Worte Index, also eine Suche wie dies zu tun:

SELECT * FROM Movies WHERE CONTAINS(Title, '"Terminator 2"')

ist eigentlich äquivalent dies zu tun:

SELECT * FROM Movies WHERE CONTAINS(Title, '"Terminator"') <-- notice the missing '2'

und wir werden eine Fülle von falschen Ergebnissen zu bekommen.

Gibt es eine Möglichkeit SQL Server zu indizieren kleine Worte zu zwingen? Vorzugsweise würde ich eher Index nur Zahlen wie 1, 2, 21, usw. Ich weiß nicht, wo die Index-Kriterien zu definieren, oder auch wenn es möglich ist, so genau wie das sein.


Nun, ich das tat, entfernt die „Rausch Worte“ aus der Liste, und jetzt ist das Verhalten ein bisschen anders, aber immer noch nicht das, was man erwarten würde.

Eine Suche wird nicht für „Terminator 2“ (Ich mache nur das, mein Arbeitgeber nicht wirklich glücklich sein könnte, wenn ich offen legen, was wir tun ... wie auch immer, die Begriffe sind ein bisschen anders, aber das Prinzip das gleiche), ich bekomme nichts , aber ich weiß, gibt es Objekte, die beiden Wörter enthalten.

Vielleicht mache ich etwas falsch? Ich entfernte alle Nummern 1 ... 9 aus meinem Rausch-Konfiguration für ENG, ENU und NEU (neutral), regeneriert, um die Indizes und versucht, die Suche ein.

War es hilfreich?

Lösung

Diese „kleine Wörter“ werden „Füllwörter“ durch den Volltextindex betrachtet. Sie können die Liste der Füllwörter anpassen. Diese Blog-Post liefert weitere Details. Sie benötigen eine Volltextindex neu zu besiedeln, wenn Sie die Füllwörter Datei ändern.

Andere Tipps

wusste ich über die Füllwörter Datei, aber ich bin nicht, warum Ihr „Terminator 2“ Beispiel noch Sie Fragen zu geben. Man könnte fragen, dies auf der MSDN Database Engine Forum versuchen wollen wo die Menschen, die in dieser Art der Sache spezialisieren rumhängen.

Sie können kombinieren ENTHÄLT (oder CONTAINS) mit einfachen, wo die Bedingungen:

SELECT * FROM Filme WHERE CONTAINS (Titel: ' "Terminator 2"') und Titel wie '% Terminator 2%'

Während der ENTHÄLT finden alle Terminator das wo beseitigen 'Terminator 1'.

Natürlich ist der Motor intelligent genug, um mit der ENTHÄLT nicht dergleichen Zustand zu starten.

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