1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Volltextsuche mit contains: Probleme bei den Ergebnissen

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von morhinio, 16 August 2019.

  1. morhinio

    morhinio Neuer Benutzer

    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?
     
  2. ukulele

    ukulele Datenbank-Guru

    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?
     
  3. morhinio

    morhinio Neuer Benutzer

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

    ukulele Datenbank-Guru

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

    morhinio Neuer Benutzer

    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?
     
  6. ukulele

    ukulele Datenbank-Guru

    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...
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden