2009-06-15 9 views
14

Ich mache eine MS SQL Server Volltextsuche Abfrage. Ich muss Sonderzeichen vermeiden, damit ich nach einem bestimmten Begriff suchen kann, der Sonderzeichen enthält. Gibt es eine integrierte Funktion, um eine Volltextsuchfolge zu umgehen? Wenn nicht, wie würdest du es tun?SQL Server Volltextsuche Escape Characters?

Antwort

23

Schlechte Nachrichten: Es gibt keinen Weg. Gute Neuigkeiten: Sie brauchen es nicht (da es sowieso nicht hilft).

Ich habe ähnliches Problem auf einem meiner Projekte konfrontiert. Mein Verständnis ist, dass, während Volltextindex erstellen, SQL Server behandelt alle Sonderzeichen als Worttrennzeichen und daher:

  1. Dein Wort mit einem solchen Charakter als zwei dargestellt (oder mehr) Wörter in Volltextindex.
  2. Diese Zeichen werden entfernt und erscheinen nicht in einem Index.

Betrachten wir die folgende Tabelle mit einer entsprechenden Volltextindex für sie (die übersprungen):

CREATE TABLE [dbo].[ActicleTable] 
(
    [Id] int identity(1,1) not null primary key, 
    [ActicleBody] varchar(max) not null 
); 

später Betrachten wir fügen Sie Zeilen in die Tabelle:

INSERT INTO [ActicleTable] values ('digitally improvements folders') 
INSERT INTO [ActicleTable] values ('digital"ly improve{ments} fold(ers)') 

Versuchen Sie zu suchen:

SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'digitally') 
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'improvements') 
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'folders') 

und

SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'digital') 
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'improve') 
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'fold') 

Die erste Gruppe von Bedingungen entspricht der ersten Zeile (und nicht die zweite), während die zweite Gruppe nur der zweiten Zeile entspricht.

Leider konnte ich keine Verbindung zu MSDN (oder etwas) finden, wo solches Verhalten eindeutig angegeben wird. Aber ich habe eine official article gefunden, die erklärt, wie Anführungszeichen für Volltext-Suchabfragen zu konvertieren, die [implizit] mit dem oben beschriebenen Algorithmus ausgerichtet ist.