ページの先頭行へ戻る
Symfoware Server V12.7.0 RDB運用ガイド(Textアダプタ編)
FUJITSU Software

2.7.1 CONTAINS関数

データベースに格納したデータに対して全文検索を適用する場合は、SQLのCONTAINS関数を使用します。CONTAINS関数により、指定した列に対応するフィールドに対して、指定した検索条件に該当する全文検索を実行することができます。

CONTAINS関数の記述形式を以下に示します。CONTAINS関数の詳細は、以下の図を参照してください。

CONTAINS関数の記述形式
CONTAINS(列指定,‘検索条件’,ランキングスコア列名)
  • 検索結果のランキングスコア値が返ります。

  • 検索条件に一致しない場合、0が返ります。

列指定には、全文検索の対象とするデータが格納されている列を指定します。

検索条件には、検索したいキーワードとそれらを結合する演算子から構成されます。なお、演算子は省略することができます。演算子を省略した場合、論理積演算子が指定されたものとみなします。

参照

Accela BizSearchの検索条件式については、“Accela BizSearch プログラマーズガイド”を参照してください。

ランキングスコア列名は、ランキングスコア値を取出す場合に指定します。取り出したランキングスコア値(ランキング列名)をORDER BY句に指定してソートする等を実施することができます。ランキングスコア列名は省略可能です。

CONTAINS関数の結果は、検索条件で指定した検索キーワードの出現率を表すランキングスコア値(REAL型)です。出現率が高ければより大きな値となり、検索キーワードが一致しない場合、0を返します。

以下に、CONTAINS関数の使用例を示します。

図2.14 CONTAINS関数による検索例

この例では、「概要」列に対して、検索条件「富士通 | FUJITSU」(キーワード「富士通」または「FUJITSU」を含む)が一致する行の「コード」「書名」「概要」列のデータを選択しています。

Textアダプタ定義によって「概要」列とAccela BizSearchのインデックスに存在するフィールド「contents」が対応しており、CONTAINS関数はフィールド「contents」に対して指定した検索条件にしたがって検索を行います。
また、CONTAINS関数は、以下に示すように、他の列の条件と組み合わせて使用することもできます。

CONTAINS関数による条件例
SELECT  コード,書名,概要  FROM  書籍スキーマ.書籍表
WHERE  コード>10  AND  CONTAINS(概要,'富士通| FUJITSU') > 0

この例では、「コード」列が10より大きくかつ、検索条件「富士通 | FUJITSU」(キーワード「富士通」または「FUJITSU」を含む)が一致する行の「コード」「書名」「概要」列のデータを選択しています。

検索モード

検索動作の違いやスコア計算の有無により、以下の3種類の検索モードを選択することができます。これは、Accela BizSearchがサポートする検索モードと同じものです。

検索モードは、以下のように検索条件に検索モードを指定することで選択することができます。検索モードを指定しない場合、検索モードはランキングブーリアン検索モードとなります。

検索モード
  • ブーリアン検索モード
    CONTAINS(列指定,TEXT(BOOL,‘検索条件’),ランキングスコア列名)

  • ランキングブーリアン検索モード
    CONTAINS(列指定,TEXT(RANK_BOOL,‘検索条件’),ランキングスコア列名)
    CONTAINS(列指定,‘検索条件’,ランキングスコア列名)

  • ランキング検索モード
    CONTAINS(列指定,TEXT(RANK,‘検索条件’),ランキングスコア列名)

備考1.各検索モードで、ランキングスコア列名は、省略可能です。

備考2.ブーリアン検索モードの場合、検索結果として通知されるランキングスコア値は、一致している場合「1」、不一致の場合「0」を返します。

参照

検索モードの詳細と各検索モードで指定可能な演算子/識別子については、“Accela BizSearch 開発キット 全文検索システム”を参照してください。