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.....