2009-03-24 5 views
2

Ich habe FT-Suche in SQL Server 2005 eingerichtet, aber ich kann nicht finden, eine Möglichkeit zu finden, "Lias" Schlüsselwort zu einem Datensatz mit "Lia" zu entsprechen. Was ich grundsätzlich möchte, ist, Leuten zu erlauben, ohne den Apostroph zu suchen.Apostrophen und SQL Server FT Suche

Ich habe dieses Problem schon seit geraumer Zeit behoben und jede Hilfe wird wirklich ein Segen sein.

Antwort

1

EDIT 2: nur festgestellt, dass dies nicht Ihr Problem lösen, bitte ignorieren und andere Antwort sehen! Der folgende Code gibt Ergebnisse für einen Fall zurück, in dem ein Benutzer ein Apostroph eingefügt hat, das nicht vorhanden sein sollte, z. B. "aufgegebene Fracht".

ich nicht FT lokal installiert und habe nicht getestet - die Syntax verwenden können von ENTHÄLT für das Testen sowohl der ursprünglichen Auftreten und eine mit dem Apostroph gestrippt, das heißt:

SELECT * 
FROM table 
WHERE CONTAINS ('value' OR Replace('value', '''','')) 

EDIT: Sie können nach Phrasen in Anführungszeichen suchen, z

SELECT * 
FROM table 
WHERE CONTAINS ("this phrase" OR Replace("this phrase", '''','')) 

Siehe MSDN documentation for CONTAINS. Das deutet darauf hin, dass die Interpunktion sowieso ignoriert wird, aber ich habe es noch nicht getestet; es kann sich lohnen, CONTAINS('value') allein zu versuchen.

+1

Hmm .. Dies kann funktionieren, aber wie wäre es mit Phrasen suchen? Dies ist eher für exakte Term-Suchen geeignet. – vintana

+0

Bearbeitet, um Phraseninformationen hinzuzufügen und eine Verknüpfung zur Dokumentation herzustellen. –

0

Ich habe nicht verwendet FT, aber Abfragen auf varchar-Spalten dabei, und die Suche nach Familienname wie O'Reilly, habe ich verwendet:

surname like Replace(@search, '''', '') + '%' or 
Replace(surname,'''','') like @search + '%' 

Dies ermöglicht die Apostroph in entweder zu sein der Datenbankwert oder der Suchbegriff. Es wird auch offensichtlich wie ein Hund mit einem großen Tisch durchführen.

Die Alternative (wahrscheinlich auch keine gute) wäre, eine zweite Kopie der Daten zu speichern, ohne alphanumerische Zeichen, und Suche (auch?) Gegen diese Kopie. Also würde das Original Lias und die zweite Kopie Lias enthalten. Eine Verdoppelung der Menge an Speicher usw.

+0

Kopieren der Textspalte zu einem anderen, minus dem Apostroph, ist der letzte Ausweg, den ich im Sinn habe. Es scheint jedoch nicht richtig zu sein. Kann Lucene.NET oder andere Möglichkeiten zur Suche dieses Problem umgehen? – vintana

0

Ein anderer Versuch:

SELECT surname 
FROM table 
WHERE surname LIKE '%value%' 
OR REPLACE(surname,'''','') LIKE '%value%' 

Dies funktioniert für mich (ohne FT aktiviert), das heißt ich die gleichen Ergebnisse erhalten, wenn für O'Connor oder OConnor suchen.