Volltextsuche mit contains: Probleme bei den Ergebnissen

morhinio

Neuer Benutzer
Beiträge
3
Hallo,

ich benutze die Volltextsuche des MS SQL-Servers. Entsprechender Katalog ist auch erstellt und die Suche funktioniert.

Allerdings bin ich hinsichtlich den Ergebnissen bei contains etwas irritiert.

CONTAINS mit <simple_term>
Code:
where contains(content, 'gericht')
Dürften dann nicht nur Ergebnisse angezeigt werden, die in der Spalte content das Wort gericht enthalten und nicht auch Wörter wie Sozialgerichtsgesetzes?
Das ist nämlich bei mir der Fall.

CONTAINS mit <prefix_term>
Code:
where contains(content, '"gericht*"')
Dürften dann nicht nur Ergebnisse angezeigt werden, bei denen das Wort mit gericht beginnt.
Aber auch hier findet der Server Ergebnisse mit dem Wort Sozialgerichtsgesetzes.

Mache ich hier einen Denkfehler?
 
Werbung:
So würde ich es auch verstehen, habe mir aber auch nur grade Beispiele durchgelesen. Meiner Meinung nach sind die " im 2ten Beispiel aber überflüssig solange du nicht mehrere Suchbegriffe kombinierst.

Es könnte etwas mit dem Spracheinstellungen zu tun haben (nur eine Idee), hast du es mal mit einer Buchstabenkombination wie gerich und gerich* probiert? Verhält es sich damit identisch?
 
Danke für den Hinweis.
Bei der Sprache scheint alles zu passen. Ich habe auch nochmal den language Parameter mit übergeben - ohne Veränderung.
Code:
where contains(content, 'gericht', language 1031)

Wenn ich als Suchwort nur gerich verwende, liefert der SQL Server keine Ergebnisse.

Meiner Meinung nach benötigt man die doppelten Anführungszeichen, ansonsten erkennt er den * nicht als Wildcard.
Wenn der Text und das Sternchen nicht in doppelten Anführungszeichen stehen, sodass das Prädikat als CONTAINS (column, 'text*') gelesen wird, wird das Sternchen bei der Volltextsuche als Zeichen behandelt
 
Meine Idee war das er aufgrund der Sprache "Gericht" irgendwie als eigenständiges Wort behandelt, auch wenn es in einem zusammengesetzten Wort steht. Das scheint mir zwat unwarscheinlich, dazu bräuchte es ein Wörterbuch für Deutsch aber nicht ganz ausgeschlossen, daher die Sache mit einer unbekannten Buchstaben-Kombination.

Ne andere Idee habe ich leider grade nicht.
 
Ich denke ich habe den Grund für die Ergebnisse gefunden. Die Sprache war die richtige Spur. Es liegt an der Worttrennung. Hier habe ich bisher als Sprache German im Volltextkatalog eingestellt.

Testszenario
Tabelle Content

Id | nvarchar(128)
Html | nvarchar(max) | volltextindiziert

Inhalte
E41… | <p>Sozialgerichtsgesetzes</p><p>sozialgerichtlichen</p><p>Gerichte</p><p>hüte</p>

Es werden dann folgende Wörter indiziert:
Code:
SELECT * FROM sys.dm_fts_index_keywords(db_id('test'), object_id('Content'))
gericht, gerichte, gerichtlichen, gesetzes, hüte, sozial, sozialgerichtlichen, sozialgerichtsgesetzes

Da mir dies zu weitläufig ist, habe ich jetzt folgenden folgenden Ansatz gewählt:
Die Sprache für die Worttrennung auf neutral geändert. Dadurch werden Leerzeichen und Satzzeichen als Worttrennungen verwendet. Damit sieht das Ergebnis im Volltextkatalog wie folgt aus:
gerichte, hüte, sozialgerichtlichen, sozialgerichtsgesetzes

Damit erhalte ich für folgende Abfrage kein Ergebnis mehr:
Code:
SELECT Id, Html FROM Content where contains(Html, 'gericht')
Soweit so gut. Da ich aber gerne noch die Pluralformen hätte, nutze ich formof mit Angabe der Sprache:
Code:
SELECT Id, Html FROM Content where contains(Html, 'FORMSOF (INFLECTIONAL, "gericht")', language 1031)
Code:
SELECT Id, Html FROM Content where contains(Html, 'FORMSOF (INFLECTIONAL, "hut")', language 1031)
Jeweils ein Ergebnis.

Ist dies die richtige Herangehensweise oder gibt es eine andere Möglichkeit die Worttrennungen/Wortstammerkennung zu beeinflussen?
 
Werbung:
Sieht für mich plausibel aus, aber Erfahrung habe ich keine. Das mit der Worttrennung aufgrund der Spracheinstellungen war ja nur ein Verdacht, interessant das das geht. Muss ja ein Wörterbuch dahinter stehen...
 
Zurück
Oben