12 Stimmen

SQL Server Volltextsuche findet meine Zeilen nicht

Ich habe eine SQL Server-Tabelle und versuche, die Volltextsuche zu verstehen :-)

Ich habe einen Volltextkatalog und einen Volltextindex für eine Tabelle eingerichtet Entry die neben anderen Spalten eine VARCHAR(20) Spalte genannt VPN-ID .

Die Tabelle enthält etwa 200'000 Zeilen, und die VPN-ID Spalte hat Werte wie:

VPN-000-359-90
VPN-000-363-85
VPN-000-362-07
VPN-000-362-91
VPN-000-355-55
VPN-000-368-36
VPN-000-356-90

Jetzt versuche ich, Zeilen in dieser Tabelle mit einer volltextfähigen Suche zu finden.

Wenn ich das tue

SELECT (list of columns)
FROM dbo.Entry
WHERE CONTAINS(*, 'VPN-000-362-07')

ist alles in bester Ordnung und meine Zeilen werden zurückgegeben.

Wenn ich die Suche mit einem Platzhalter wie diesem beginne:

SELECT (list of columns)
FROM dbo.Entry
WHERE CONTAINS(*, 'VPN-000-362-%')

Ich erhalte Ergebnisse und alles scheint in Ordnung zu sein.

ABER: wenn ich auf diese Weise suche:

SELECT (list of columns)
FROM dbo.Entry
WHERE CONTAINS(*, 'VPN-000-36%')

plötzlich bekomme ich überhaupt keine Ergebnisse zurück....., obwohl es eindeutig Zeilen, die diesen Suchkriterien entsprechen...

Irgendwelche Ideen, warum? Welche anderen "Überraschungen" könnte die Volltextsuche noch für mich bereithalten? :-)

Aktualisierung: zur Erstellung meines Volltextkatalogs verwendet:

CREATE FULLTEXT CATALOG MyCatalog WITH ACCENT_SENSITIVITY = OFF

und um den Volltextindex für meine Tabelle zu erstellen, habe ich

CREATE FULLTEXT INDEX 
ON dbo.Entry(list of columns)
KEY INDEX PK_Entry

Ich habe versucht, so weit wie möglich alle "ausgefallenen" Optionen zu vermeiden.

Update #2: Nach weiteren Untersuchungen scheint es, als ob die SQL Server-Volltextsuche meine Bindestriche innerhalb der Zeichenfolgen als Trennzeichen interpretiert....

Diese Abfrage ergibt jedoch nichts:

SELECT (list of columns)
FROM dbo.Entry
WHERE CONTAINS(*, '"VPN-000-362*"')

dieser hier (Aufteilung des Suchbegriffs auf die Bindestriche):

SELECT (list of columns)
FROM dbo.Entry
WHERE CONTAINS(*, ' "VPN" AND "000" AND "362*"')

OK - scheint etwas seltsam zu sein, dass ein Bindestrich zu einer Aufteilung zu führen scheint, die irgendwie nicht funktioniert.....

8voto

Qui Language for Word Breaker verwenden Sie? Haben Sie versucht Neutral ?

enter image description here

EDIT:
zusätzlich sollten Sie verwenden WHERE CONTAINS([Column], '"text*"') . Siehe MSDN für weitere Informationen über Präfix-Suchen :

C. Verwendung von CONTAINS mit

Das folgende Beispiel r Produktnamen mit mindestens einem Wort das mit der Präfixkette in der Datei Spalte Name.

USE AdventureWorks2008R2;
GO
SELECT Name
FROM Production.Product
WHERE CONTAINS(Name, ' "Chain*" ');
GO

btw ... ähnliche Frage aquí y aquí

1voto

Oliver Punkte 3145

Ich frage mich nur, warum Sie das nicht einfach tun:

SELECT (list of columns)
FROM dbo.Entry
WHERE [VPN-ID] LIKE 'VPN-000-36%'

Ich habe den Eindruck, dass die Volltextsuche nicht das richtige Werkzeug für diese Aufgabe ist. Verwenden Sie einfach einen normalen Index für diese Spalte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X