none
SQL Server Volltext-Suche RRS feed

  • Frage

  • Hallo Forum,

    ich nutze den SQL Server 2012 mit Volltext.
    Dabei habe ich aber die seltsame Situation, dass Datensätze in manchen Fällen gefunden werden, in anderen nicht, obwohl sie aus meiner Sicht in beiden Fällen gefunden werden sollten.

    Hier ein Beispiel:
    Ich habe verschiedene Datensätze in denen das Wort "Sicherstellungszeiten" vorkommt.

    Bei der Volltextsuche nach "Sicherstellung*" findet er diese Datensätze nicht.

    SELECT * FROM Projects WHERE CONTAINS(Info, '"Sicherstellung*"')

    Bei der Volltextsuche nach "Sicherstellungs*" werden sie gefunden.

    SELECT * FROM Projects WHERE CONTAINS(Info, '"Sicherstellungs*"')
    Das erscheint mir irgendwie unlogisch, da ja beide Begriffe im Text vorkommen.
    Hat jemand dafür eine Erklärung bzw. eine Möglichkeit, dass beide Suchen die richtigen Ergebnisse bringen?


    • Bearbeitet Torsten_77 Mittwoch, 12. Juli 2017 09:15
    Mittwoch, 12. Juli 2017 09:01

Antworten

Alle Antworten

  • Warum bettest du das Wort noch mal in doppelte Anführungszeichen?
    Diese gehören dann mit zum Suchmuster!
    Gib mal nur folgendes ein:

    SELECT * FROM Projects WHERE CONTAINS(Info, 'Sicherstellung')

    Mittwoch, 12. Juli 2017 09:06
  • Hallo,

    danke für die Antwort.

    Deine Abfrage bringt leider das gleiche Ergebnis, d.h. die Datensätze werden nicht gefunden.

    Ich hatte mich bei meiner Abfrage an den Hinweisen auf

    https://docs.microsoft.com/de-de/sql/relational-databases/search/query-with-full-text-search

    orientiert.

    Es werden alle Textstellen zurückgegeben, die mit dem Text vor dem Sternchen () übereinstimmen. Wenn der Text und das Sternchen nicht in doppelte Anführungszeichen eingeschlossen sind, wie in CONTAINS (DESCRIPTION, 'top*'), wird das Sternchen von der Volltextsuche nicht als Platzhalter betrachtet.

    Mittwoch, 12. Juli 2017 09:23
  • Die Definition findest du hier:
    https://msdn.microsoft.com/de-de/library/ms187787%28v=sql.120%29.aspx?f=255&MSPPError=-2147217396

    Wenn ich das richtig interpretiere, dann findet 'Wort' nur ganze Wörter, während "Wort*" alle Wörter findet, die mit 'Wort' beginnt und "*wort*", alle Wörter die 'wort' enthalten.

    Wenn also dein Wort 'Sicherstellung' so alleine im Text nicht vorkommt, dann musst du halt das Muster "Sicherung*" suchen. Dabei werden aber Wörter wie 'Datensicherung' nicht gefunden. Hier ist dann "*sicherung*" zu verwenden.
    Also je nach dem, was du nun genau suchst.

    Mittwoch, 12. Juli 2017 10:42
  • Hallo,

    der FTS Parser

    SELECT *
    FROM sys.dm_fts_parser(N'"Sicherstellungszeiten"', 1031, 0, 0) AS fts

    liefert "sicherstellungszeiten", "Sicherstellung" und "Zeiten" als Exact Match; da sollte "Sicherstellung" zu finden sein. Sie die Wert (schon) im Index zu finden?

    SELECT * 
    FROM sys.dm_fts_index_keywords(db_id(), object_id('Tabelle')) AS FTS
    WHERE FTS.keyword LIKE 'Sicherstellung%'


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Mittwoch, 12. Juli 2017 12:29
  • Danke für die Antworten.


    @bfuerchau

    Ja, so habe ich das auch interpretiert, aber es funktioniert leider nicht so.

    @Olaf Helper
    Ja, im Index sind "sicherstellung" und "sicherstellungszeiten" enthalten, aber er findet die Datensätze über "Sicherstellung*" nicht.



    • Bearbeitet Torsten_77 Mittwoch, 12. Juli 2017 15:32
    Mittwoch, 12. Juli 2017 15:32
  • Ich habe es mal ausgetestet und bei mir funktioniert es problemlos (SQL Server 2016 Build 13.0.4202

    Wie ist der Volltextkatalog angelegt, evtl. Case Sensitive und der Text liegt in Lower case vor?


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Freitag, 14. Juli 2017 15:57