Benutzer mit den meisten Antworten
SQL Server Volltext-Suche

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
Antworten
-
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 18. Juli 2017 12:24
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Donnerstag, 27. Juli 2017 14:14
Alle Antworten
-
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. -
Die Definition findest du hier:
https://msdn.microsoft.com/de-de/library/ms187787%28v=sql.120%29.aspx?f=255&MSPPError=-2147217396Wenn 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.
-
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] -
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
-
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 18. Juli 2017 12:24
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Donnerstag, 27. Juli 2017 14:14