Frage

Meine Abfrage sieht unter Verwendung von SQL Server 2005 beispielsweise wie folgt aus:

SELECT * FROM Table WHERE FREETEXT(SearchField, 'c#') 

Ich habe einen Volltextindex definiert, der die Spalte SearchField verwendet, der Ergebnisse zurückgibt, wenn Folgendes verwendet wird:

SELECT * FROM Table WHERE SearchField LIKE '%c#%'

Ich glaube, # ist ein Sonderbuchstabe. Wie kann ich also zulassen, dass FREETEXT für die obige Abfrage korrekt funktioniert?

War es hilfreich?

Lösung

Das #-Zeichen wird als Satzzeichen indiziert und daher ignoriert. Es sieht also so aus, als würden wir den Buchstaben C aus unseren Ignorierungslisten für die Wortindizierung entfernen.

Habe es danach lokal getestet und die Indizes neu erstellt, und ich erhalte Ergebnisse!

Erwägen Sie die Verwendung einer anderen Wörtertrennungssprache für die indizierte Spalte, damit diese Sonderzeichen nicht ignoriert werden.

BEARBEITEN:Habe ich auch gefunden diese Information:

c# wird als c indiziert (wenn c nicht in Ihrer Füllwortliste enthalten ist, siehe später mehr zu Füllwortlisten), aber C# wird als C# indiziert (in SQL 2005 und SQL 2000 unter Win2003, unabhängig davon, ob C oder c in Ihrem Füllwort ist Wortliste).Als C# wird nicht nur C# gespeichert, sondern auch jeder Großbuchstabe gefolgt von #.Umgekehrt wird c++ (und jeder andere Kleinbuchstabe gefolgt von einem ++) als c indiziert (unabhängig davon, ob c in Ihrer Füllwortliste enthalten ist).

Andere Tipps

Zitieren einer häufig wiederholten Hilfeseite zur Abfragesprache des Indexdiensts:

Um in einer Abfrage speziell behandelte Zeichen wie &, |, ^, #, @, $, (, ) zu verwenden, schließen Sie Ihre Abfrage in Anführungszeichen (“) ein.

Soweit ich weiß, Volltextsuche in MSSQL wird auch vom Indexdienst durchgeführt, daher könnte dies hilfreich sein.

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