Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Daten abfragen und ändern » Daten abfragen » Arten der Volltextsuche

 

Volltext-Suchergebnisse bewerten

Wenn Sie eine CONTAINS-Klausel in eine FROM-Klausel einer Abfrage einbeziehen, hat jede Übereinstimmung einen ihr zugeordneten Punktewert. Der Punktewert zeigt an, wie genau die Übereinstimmung ist, und Sie können die Punktewertinformationen verwenden, um die Daten zu sortieren.

Die Bewertung basiert auf zwei Kriterien:

  • Die Häufigkeit, mit der ein Begriff in der indizierten Zeile erscheint.   Je häufiger ein Begriff in der indizierten Zeile auftritt, desto höher ist der Punktewert.

  • Die Häufigkeit, mit der ein Begriff im Textindex erscheint.   Je häufiger ein Begriff im Textindex erscheint, desto niedriger ist der Punktewert. In Sybase Central können Sie sehen, wie häufig ein Begriff im Textindex erscheint, indem Sie das Register Vokabular für den Textindex verwenden. Wählen Sie die Begriff-Spalte, um die Begriffe alphabetisch zu sortieren. Die Häufigkeitsspalte zeigt an, wie oft der Begriff im Textindex erscheint.

Abhängig vom Typ der Volltextsuche wirken sich auch andere Kriterien auf die Bewertung aus. In Nachbarschaftssuchen wirkt sich beispielsweise die Nähe von Suchbegriffen zueinander auf die Bewertung aus.

Punktewerte anwenden

Standardmäßig hat die Ergebnismenge einer CONTAINS-Klausel den Korrelationsnamen contains und enthält eine einzelne Spalte namens score. Sie können "contains".score in der SELECT-Liste, in der ORDER BY-Klausel oder in anderen Teilen der Abfrage referenzieren. Da "contains" ein reserviertes SQL-Wort ist, dürfen Sie allerdings nicht vergessen, es in Anführungszeichen zu setzen. Als Alternative können Sie einen anderen Korrelationsnamen angeben (z.B. CONTAINS ( Ausdruck ) AS ct). In den Dokumentationsbeispielen für die Volltextsuche wird die Punktewertspalte als ct.score referenziert .

Die folgende Anweisung durchsucht "MarketingInformation.Description" nach Begriffen, die mit stretch oder mit comfort beginnen:

SELECT ID, ct.score, Description  
    FROM MarketingInformation CONTAINS ( MarketingInformation.Description, 'stretch* | comfort*' ) AS ct 
    ORDER BY ct.score DESC;
ID score Description
910 5,570408968026068 <html><head><meta http-equiv=Content-Type content="text/html; charset=windows-1252"><title>Shorts</title></head><body lang=EN-US><p><span style='font-size:10.0pt;font-family:Arial'>These quick-drying cotton shorts provide all day comfort on or off the trails. Now with a more comfortable and stretchy fabric and an adjustable drawstring waist.</span></p></body></html>
907 3,658418186470189 <html><head><meta http-equiv=Content-Type content="text/html; charset=windows-1252"><title>Visor</title></head><body lang=EN-US><p><span style='font-size:10.0pt;font-family:Arial'>A polycarbonate visor with an abrasion-resistant coating on the outside. Great for jogging in the spring, summer, and early fall. The elastic headband has plenty of stretch to give you a snug yet comfortable fit every time you wear it.</span></p></body></html>
905 1,6750365447462499 <html><head><meta http-equiv=Content-Type content="text/html; charset=windows-1252"><title>Baseball Cap</title></head><body lang=EN-US><p><span style='font-size:10.0pt;font-family:Arial'>A lightweight wool cap with mesh side vents for breathable comfort during aerobic activities. Moisture-absorbing headband liner.</span></p></body></html>

Artikel 910 hat den höchsten Punktewert, weil er zwei Instanzen des Präfixbegriffs comfort enthält, während andere nur eine Instanz haben. Außerdem hat Artikel 910 auch eine Instanz des Präfixbegriffs "stretch.

Beispiel 2: Mehrere Spalten durchsuchen

Das folgende Beispiel zeigt, wie Sie eine Volltextsuche über mehrere Spalten ausführen und die Ergebnisse bewerten:

  1. Erstellen Sie folgendermaßen einen sofortigen Textindex für die Products-Tabelle

    CREATE TEXT INDEX scoringExampleMult 
       ON Products ( Description, Name );
  2. Führen Sie wie folgt eine Volltextsuche auf den Spalten "Description" und "Name" für die Begriffe cap oder visor aus. Das Ergebnis der CONTAINS-Klausel wird dem Korrelationsnamen "ct" zugewiesen und in der SELECT-Liste referenziert, um in die Ergebnisse aufgenommen zu werden. Außerdem wird die Spalte "ct.score" in der ORDER BY-Klausel referenziert, um die Ergebnisse in absteigender Sortierfolge anhand der Punktewerte zu sortieren.

    SELECT Products.Description, Products.Name, ct.score 
        FROM Products CONTAINS ( Products.Description, Products.Name, 'cap OR visor' ) ct 
        ORDER BY ct.score DESC;
    Description Name score
    Cloth Visor Visor 3,5635154905713042
    Plastic Visor Visor 3,4507856451176244
    Wool cap Baseball Cap 3,2340501745357333
    Cotton Cap Baseball Cap 3,090467108972918

    Die Punktewerte bei einer Suche über mehrere Spalten werden berechnet, als ob die Spaltenwerte miteinander verkettet und als einzelner Wert indiziert wären. Beachten Sie allerdings, dass Phrasen und NEAR-Operatoren nie über mehrere Spaltengrenzen übereinstimmen, und ein Suchbegriff, der in mehr als einer Spalte erscheint, den Punktewert mehr erhöht, als er es in einem einzelnen verketteten Wert tun würde.

  3. Damit die Beispiele in der Dokumentation richtig funktionieren, müssen Sie den Textindex löschen, den Sie für die Products-Tabelle erstellt haben. Um dies zu tun, führen Sie die folgende Anweisung aus:

    DROP TEXT INDEX scoringExampleMult ON Products;