Abkürzungen im Volltextsuchindex

7

Ich habe eine Textspalte mit verschiedenen Wörtern, die in Abkürzungen abgekürzt wurden. Beispielsweise könnte die Spalte anstelle von "versichert" "insd" enthalten. Ich verstehe, dass ich eine Thesaurus-Datei verwenden kann , um eine Liste von Synonymen zu erstellen, sodass eine Suche nach "insd" effektiv Zeilen zurückgeben kann, die sowohl "versichert" als auch "insd" enthalten. Perfekt.

Einige der anderen Abkürzungen in der Spalte enthalten jedoch "Sonderzeichen" wie einen Schrägstrich oder ein kaufmännisches Und, wie z.

t / p - Dritter
o / s - andere Seite
p / p - pro Person
i & o - innen und außen

Gibt es eine Möglichkeit , Fragen zu stellen CONTAINSoder zu FREETEXTverstehen, die diese Wörter enthalten? Zum Beispiel:

SELECT *
FROM dbo.MyTable
WHERE FREETEXT(MyColumn, 't/p');

Ich habe die Thesaurus-Datei tsenu.xmlam richtigen Speicherort für die Instanz erstellt:

<XML ID = "Microsoft Search Thesaurus">
    <thesaurus xmlns = "x-schema: tsSchema.xml">
    <diakritisch_empfindlich> 0 </ diakritisch_empfindlich>
        <Erweiterung>
            <sub> versichert </ sub>
            <sub> insd </ sub>
        </ Expansion>
        <Erweiterung>
            <sub> t / p </ sub>
            <sub> Dritter </ sub>
        </ Expansion>
        <Erweiterung>
            <sub> o / s </ sub>
            <sub> andere Seite </ sub>
        </ Expansion>
        <Erweiterung>
            <sub> p / p </ sub>
            <sub> pro Person </ sub>
        </ Expansion>
    </ thesaurus>
</ XML>

Und geladen mit EXEC sys.sp_fulltext_load_thesaurus_file 1033;, jedoch liefert die Abfrage unvorhersehbare Ergebnisse.

Max Vernon
quelle
Im Jahr 2013 schien Paul White auf eine unzureichende Antwort auf eine ähnliche Frage hinzuweisen . Ich kann mir leider keine neuen Verbesserungen vorstellen, die dies ändern würden. Als Workaround könnten Sie versuchen, die Zeichen in einer separaten Spalte zu entfernen, um danach zu suchen, aber ich stelle mir vor, dass dies auf lange Sicht ziemlich chaotisch sein könnte.
LowlyDBA
@ LowlyDBA - hah, ich habe sogar dafür gestimmt, diese Frage zu schließen. Vielen Dank!
Max Vernon
Dies spricht auch über diesen Ansatz.
Max Vernon
Die Problemumgehung von MS besteht darin, den LIKEOperator zu verwenden: support.microsoft.com/en-us/help/200043/…
MJH

Antworten:

4

Wenn Sie Wörter mit Sonderzeichen hinzufügen möchten, die als einzelnes Wort behandelt werden sollen, möchten Sie ein benutzerdefiniertes Wörterbuch erstellen.

Erstellen von benutzerdefinierten Wörterbüchern für spezielle Begriffe, die unverändert in SQL Server 2008-Volltextindizes indiziert werden sollen

Beachten Sie, dass benutzerdefinierte Wörterbücher nur eine begrenzte Größe haben. Je größer das Wörterbuch, desto langsamer kann der Volltext werden.

Benutzerdefinierte Wörterbücher eignen sich hervorragend, wenn Sie nur eine begrenzte Anzahl von Wörtern wie AT & T oder M & Ms hinzufügen müssen. Hierbei handelt es sich um Wörter mit Sonderzeichen, die möglicherweise immer wieder verwendet werden und als einzelnes Wort behandelt werden sollen, anstatt als Standardverhalten für das Brechen von Wörtern.

Benutzerdefinierte Wörterbücher eignen sich nicht für Wörter wie Teilenummern (z. B. JY-14562, PTW-14432 usw.), bei denen jede Zeile in einer Tabelle zu einem neuen Eintrag im benutzerdefinierten Wörterbuch führen würde. Möglicherweise haben Sie mehrere hunderttausend oder mehr eindeutige Teilenummern. Das wäre keine gute Verwendung für ein benutzerdefiniertes Wörterbuch. Wenn Sie diese Art von Verhalten benötigen, ist es besser, einen eigenen Wortbrecher zu schreiben. Das Erstellen von Wortunterbrechern ist weder gut dokumentiert noch einfach zu erstellen. Sie können jedoch entscheiden, wie Wörter gebrochen werden sollen, wenn Sie auf Sonderzeichen stoßen.

Robert Beene
quelle