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

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL の使用法 » データのクエリと変更 » データのクエリ » 全文検索のタイプ

 

全文検索結果のスコア付け

クエリの FROM 句に CONTAINS 句を含めると、一致ごとに関連するスコアが付けられます。このスコアは一致がどれだけ近いかを示しており、スコア情報を使用してデータをソートできます。

スコアは、主に次の 2 つの基準に基づいて付けられます。

  • インデックス付けされたローにその単語が出現する回数   その単語が、インデックス付けされたローに多く出現するほどスコアは高くなります。

  • テキスト・インデックスにその単語が出現する回数   その単語が、テキスト・インデックスに多く出現するほどスコアは低くなります。Sybase Central では、テキスト・インデックスの [ボキャブラリ] タブを表示することで、テキスト・インデックスに出現する各単語の回数を確認できます。単語をアルファベット順にソートするには、term カラムを選択します。freq カラムに、その単語がテキスト・インデックスに出現する回数が表示されます。

また、全文検索のタイプによっては、スコアに影響する基準が他にもあります。たとえば近接検索では、検索語にどれだけ近接しているかがスコアに影響します。

スコアの使用方法

デフォルトでは、CONTAINS 句の結果セットには contains という相関名があり、score というカラムが 1 つ含まれています。"contains".score は、SELECT リスト、ORDER BY 句、またはクエリの他の部分で参照できます。ただし、contains は SQL の予約語なので、二重引用符で囲む必要があります。また、別の相関名を指定する方法もあります (たとえば、CONTAINS ( expression ) AS ct)。このマニュアルで使用している全文検索の例では、スコア・カラムは ct.score と記載しています。

次の文は、MarketingInformation テーブルの Description カラムで stretch または comfort で始まる単語を検索します。

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 「comfort」able and 「stretch」y 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 「comfort」able 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>

プレフィクス単語 comfort のインスタンスが、他の項目には 1 つしかないのに対して、項目 910 には 2 つ含まれているため、910 のスコアが最も高くなります。また、項目 910 にはプレフィクス単語 stretch. のインスタンスも含まれています。

例 2:複数のカラムの検索

次の例では、複数のカラムに渡る全文検索を実行し、結果のスコアを表示する方法を示しています。

  1. 次のようにして、Products テーブルで即時テキスト・インデックスを作成します。

    CREATE TEXT INDEX scoringExampleMult 
       ON Products ( Description, Name );
  2. 次にようにして、Description カラムと Name カラムで、cap または visor という単語の全文検索を実行します。CONTAINS 句の結果には ct という相関名が割り当てられ、結果に含まれるように SELECT リストで参照されます。また、ct.score カラムは ORDER BY 句で参照され、結果はスコアの降順でソートされます。

    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

    複数カラムの検索のスコアは、カラム値が連結され、1 つの値としてインデックス付けされているかのように計算されます。ただし、そのフレーズと NEAR 演算子は、カラムの境界を超えて一致することはなく、複数のカラムに出現する検索語は、単一の連結された値よりもスコアが大きくなります。

  3. このマニュアルの他の例を正常に動作させるためには、Products テーブルで作成したテキスト・インデックスを削除する必要があります。削除するには、次の文を実行します。

    DROP TEXT INDEX scoringExampleMult ON Products;