none
FullTextSearch liefert falsches Ergebnis RRS feed

  • Frage

  • Hallo Leute,

     

    ich verwende seit ca. 6 Monaten die FTS produktiv auf einem SQL 2008 Standard SP1 64bit!

    Leider kommt es immer wieder vor, dass mir die Suche keine Ergebnisse liefert, obwohl der Suchbegriff richtig ist ...

    folgendes Szenario: indizierte Spalte beinhaltet den (fiktiven) Wortlaut "A. Microsoft"

    in VS2008 (C# Assembly) erstelle ich folgendes Query (vereinfacht): 

    SELECT mt.*,
    CASE WHEN Name='A. Microsoft' AND PLZ IS NOT NULL AND PLZ<>'' THEN 0 
    WHEN Name LIKE 'A. Microsoft %' AND PLZ IS NOT NULL AND PLZ<>'' THEN 1 
    WHEN Name LIKE REPLACE('A. Microsoft%', ' ', '_') AND PLZ IS NOT NULL AND PLZ<>'' THEN 2 
    WHEN Name LIKE REPLACE('%A. Microsoft%', ' ', '_') AND PLZ IS NOT NULL AND PLZ<>'' THEN 3 ELSE 4 END AS 'Sortierung' 
    FROM meineTabelle mt 
    WHERE ((CONTAINS(Name, '"A."') 
    AND CONTAINS(Name, '"Microsoft*"'))) 
    AND mt.Aktiv=1 
    AND mt.istFirma=1 ORDER BY Sortierung ASC, PLZ ASC, Name ASC, Strasse ASC
    
    

    wenn ich jetzt zB nur nach Microsoft suchen würde, findet die FTS sehr wohl den Eintrag, der auf "A. Microsoft" lautet ... suche ich jedoch wie oben angegeben, bekomme ich kein Ergebnis zurück ...

    sys.dm_fts_parser war leider auch nicht sehr aufschlussreich ... btw. Stoplist ist für diesen FTC deaktiviert ...

    selbiges Problem tritt auch bei der Suche nach "Co." auf ... zB findet die FTS den Eintrag nur, wenn ich nur nach "Microsoft Co" suche, obwohl der Eintrag auf "Microsoft Co." lautet ...

    könnt ihr mir vielleicht Tipps geben, wie ich dieses Verhalten beeinflussen kann?

    vielen Dank im Voraus! 

    Grüße Andi

    Donnerstag, 2. Dezember 2010 09:20

Antworten

  • edit (sorry fürs eigene Posting, aber bei der Funktion Bearbeiten wird mir die ganze Seite reinkopiert, anstatt nur mein Post)

     

    ich hab jetzt mal ein paar Firmennamen durchprobiert und das Ergebnis ist für mich einfach nicht nachvollziehbar!

    zB Suche nach "A & B Sowiesounternehmen Ges.m.b.H. in Liquidation" liefert genau einen Treffer mit diesem Wortlaut ... da ich davon ausging, dass einzelne Buchstaben ja nicht als komplett Wort gewertet werden, müsste die Suche nach "Sowiesounternehmen Ges.m.b.H. in Liquidation" dementsprechend das selbe Ergebnis liefern! und siehe da, es werden plötzlich 3 Treffer angezeigt!

    ------------------------------------

    sooo, jetzt habe ich gerade den Fehler gefunden ... beim Test-System ist der FTC falsch konfiguriert (Language-Settings & Stoplist) und deshalb liefert mir diese Suche komplett falsche Ergebnisse ... auf dem Produktivserver finde ich übrigens auch die (fiktive) Firma "A. Microsoft"

    es ist ja echt zum Mäuse melken ;-) ... naja jetzt werde ich noch ein paar Suchabfragen durchprobieren ...

    Donnerstag, 2. Dezember 2010 12:46

Alle Antworten

  • Hallo Andi,
    aus der Doku:
    http://msdn.microsoft.com/de-de/library/ms187787.aspx
    CONTAINS
    Folgendes kann mit CONTAINS gesucht werden:
    - Ein Wort oder ein Ausdruck.
    - Das Präfix eines Worts oder eines Ausdrucks.
    - Ein Wort, das einem anderen Wort ähnlich ist.
    - Ein Wort, das mithilfe von Beugung aus einem anderen generiert wurde (z. B. stellt das Wort drive den Beugungsstamm von drives, drove, driving und driven dar.)
    - Ein Wort, das ein Synonym für ein anderes Wort ist (das Wort Metall kann z. B. über die Synonyme Aluminium und Stahl verfügen). Dazu wird ein Thesaurus verwendet.

    Ich sehe aber weder A. noch Co. als Wort oder Ausdruck an. Du darfst das nicht mit Like verwechseln, da hier wirklich eine Filterung der Begriffe stattfindet, nach denen Du nachher im Volltext-Katalog suchen kannst. Ausserdem gilt: Satzzeichen werden nicht beachtet. Daher werden auch die Punkte eliminiert.

    Einen schönen Tag noch,
    Christoph


    Microsoft SQL Server MVP
    http://www.insidesql.org/blogs/cmu

    Donnerstag, 2. Dezember 2010 10:32
  • Hallo Christoph,

    vielen herzlichen Dank für deine Antwort!

    Die 3 letztgenannten Suchmethoden beziehen sich ja auf die FORMSOF-Suche bzw. PROXIMITY-Suche ...

    - Ein Wort oder ein Ausdruck:

    wie wird definiert, ob Eigennamen (wie Microsoft, Dell, HP etc.) ein Wort/Ausdruck ist oder ob es dann doch unter die Kategorie "kann nicht gefunden werden" fällt? da meine Suche fast ausschließlich für solche Abfragen eingesetzt wird, wäre es interessant zu wissen, wie der Server solche Abfragen handled bzw. wie ich solche Abfragen handlen muss, dass die Suche zu einem Ergebnis führt ...

    ist es zB richtig zu behaupten, dass Abkürzungen wie "A.", "AG", "KG" etc. keine gültigen Ausdruck für die FTS darstellen (aufgrund der Länge, Zeichenfolge whatever?) und man deshalb erst gar nicht danach suchen sollte?

    Ich sehe aber weder A. noch Co. als Wort oder Ausdruck an.

    mit dieser Einstellung hast du auch m.M.n. vollkommen recht ... aber welchen Algorithmus verwendet der Server, dass er "Co." findet, "A." jedoch nicht? mich würde es nicht wundern, wenn "A." aufgrund der Länge nicht als "richtiges" Wort akzeptiert wird und deshalb nicht in den Catalog wandert - aber ist das auch der Grund?

    für mich ist das Verständnis dahinter deshalb so wichtig, da Firmennamen sehr kreative Schreibweisen aufweisen (für die Abkürzung "GmbH" fallen mir spontan schon über 10 Formen ein!) ...

    Beste Grüße

    Andi

     

    Donnerstag, 2. Dezember 2010 11:09
  • edit (sorry fürs eigene Posting, aber bei der Funktion Bearbeiten wird mir die ganze Seite reinkopiert, anstatt nur mein Post)

     

    ich hab jetzt mal ein paar Firmennamen durchprobiert und das Ergebnis ist für mich einfach nicht nachvollziehbar!

    zB Suche nach "A & B Sowiesounternehmen Ges.m.b.H. in Liquidation" liefert genau einen Treffer mit diesem Wortlaut ... da ich davon ausging, dass einzelne Buchstaben ja nicht als komplett Wort gewertet werden, müsste die Suche nach "Sowiesounternehmen Ges.m.b.H. in Liquidation" dementsprechend das selbe Ergebnis liefern! und siehe da, es werden plötzlich 3 Treffer angezeigt!

    ------------------------------------

    sooo, jetzt habe ich gerade den Fehler gefunden ... beim Test-System ist der FTC falsch konfiguriert (Language-Settings & Stoplist) und deshalb liefert mir diese Suche komplett falsche Ergebnisse ... auf dem Produktivserver finde ich übrigens auch die (fiktive) Firma "A. Microsoft"

    es ist ja echt zum Mäuse melken ;-) ... naja jetzt werde ich noch ein paar Suchabfragen durchprobieren ...

    Donnerstag, 2. Dezember 2010 12:46
  • Die Frage ist auch, welche Zielsetzung Du verfolgst. Wenn es eine unscharfe Suche sein soll und/oder Firmen identifiziert werden sollen, bei denen die Rechtschreibung ziemlich kreativ gehandhabt wurde, ist die Volltextsuche sicher der falsche Weg.
    Hier könnte man mit Fuzzy-Suchen, oder eigenen Routinen zur Normalisierung der Schreibweisen (du sprachst von 10 Versionen von GmbH, wobei mir mit ausgeschriebenen Versionen inklusive Tippfehler viel mehr einfallen) wahrscheinlich besser bedient bist.

    Einen schönen Tag noch,
    Christoph


    Microsoft SQL Server MVP
    http://www.insidesql.org/blogs/cmu

    Freitag, 3. Dezember 2010 10:18
  • wir hatten schon mal eine Fuzzy-Suche im Einsatz - leider überstieg die Anzahl der Datensätze das Lizenzmodell ... naja und für eine neue Fuzzy-Suche ist kein Budget vorhanden ...

     

    nichts desto trotz sind wir mit der Geschwindigkeit und dem Ergebnis von der Volltext-Suche zufrieden :)

    Freitag, 3. Dezember 2010 12:06