CONTAINS関数は、データベースに格納しているさまざまなテキスト文書やXML文書に対して条件を指定して検索を行う場合に、SQL文の探索条件に指定します。CONTAINS関数は、関数の引数に指定した列に格納するテキスト文書やXML文書に対して、検索条件がどの程度一致するかを表すランキングスコア値を返します。
記述形式
一般規則
CONTAINS関数の結果のデータ型は、REAL型です。検索式にどれだけ一致したかを数量的に評価した結果(ランキングスコア値と言います)を返します。
ランキングスコア値は一致度合いが大きい行ほど、大きな値を返します。一致しない行の場合は0を返します。
CONTAINS関数は、第一引数で指定した検索対象で識別する表の列に対応するフィールド、または表の複数の列に対応するフィールドに対して、格納するさまざまな文書を指定した検索種別に依存した検索式で検索することができます。
CONTAINS関数に指定した検索対象、または検索式がNULL値である場合は、CONTAINS関数の結果はNULLとなります。
CONTAINS関数の検索結果で得られる行は検索データベースごとに最大で1000件です。1つの検索データベースでの検索結果が1000件を超えた場合、ランキングスコア値の大きな上位1000件がその検索データベースでの検索結果となります。なお、テキスト検索モードにBOOLを指定した場合のランキングスコア値は一致した行のすべてが1となるため、検索結果は一致した行のうち任意の1000件となります。
CONTAINS関数は、以下の形式の比較述語として、問合せ指定のWHERE句の探索条件または結合表の結合条件に指定することができます。比較演算を行うことで、指定したよりもランキングスコア値の高い行を検索することができます。
CONTAINS関数を指定した問合せ指定は読込み専用となります。
CONTAINS関数の検索対象に列名を指定した場合は、フィールド名は省略可能です。省略した場合は、検索対象に指定した列名に対応付けられている列に対するフィールドが検索対象のフィールドになります。
検索対象に列指定を指定した場合は、問合せ指定のFROM句で指定した表の列でなければなりません。外への参照の列は指定できません。
検索対象に指定する列指定がビュー表の列または導出表の列の場合、そのビュー表または導出表は更新可能でなければなりません。
検索対象に文字列定数を指定した場合、文字列定数が示すTextアダプタ定義名により識別する表は、問合せ指定のFROM句で指定した表または、更新可能なビュー表、導出表のもととなる表でなければなりません。
検索式は文字型の値指定です。定数や変数、動的パラメタが指定できます。文書検索やXML文書検索を行うための検索式を指定します。
検索式に動的パラメタを指定した場合のDESCRIBE情報はCHAR型となります。
検索式を定数で指定する場合、検索式中の引用符は(’)は2つ連続して指定する必要があります。
比較演算式として指定できるのは“>”のみです。
テキスト検索モードの指定により、検索式の指定方法は以下のようになります。
検索種別を省略した場合
検索種別にTEXTを指定し、テキスト検索モードにRANK_BOOLを指定したと見なします。
TEXT検索式の書式は、Accela BizSearchのランキングブーリアン検索モードで指定する検索条件に従います。
検索対象には、Textアダプタを利用してAccela BizSearchのインデックスが作成されていなければなりません。
検索種別にTEXTを指定した場合
TEXT検索式の書式は、テキスト検索モードで指定します。
・Accela BizSearchのブーリアン検索モードの検索書式を指定する場合は、テキスト検索モードにBOOLと指定します。
・Accela BizSearchのランキングブーリアン検索モードの検索書式を指定する場合は、テキスト検索モードにRANK_BOOLと指定します。
・Accela BizSearchのランキング検索モードの検索書式を指定する場合は、テキスト検索モードにRANKと指定します。
検索対象には、Textアダプタを利用してAccela BizSearchのインデックスが作成されていなければなりません。
検索種別にTEXTを指定し、テキスト検索モードにBOOLを指定すると、CONTAINS関数の結果(ランキングスコア値)は、一致する場合は1、一致しない場合は0となります。
ランキングスコア値を利用して検索データの並べ替えなどを行わない場合は、ランキングブーリアン検索モードよりも高速に検索を行うことができます。
使用例
TEXT検索を使用して、ランキングブーリアン検索で全文検索を行う場合:
TEXTタイプの文書ボディーに、“富士通”または“Symfoware”を含む行について、ランキングスコア値の高い順に、書類番号、サイズ、文書ボディーを検索します。
SELESCT 書類番号,サイズ,文書ボディー FROM 文書表 WHERE CONTAINS(文書ボディー,TEXT(RANK_BOOL, '富士通 | Symfoware') ,SCORE1 ) >0 AND 書類タイプ = 'TEXT' ORDER BY SCORE1 DESC
TEXT検索を使用して、ランキング検索モードで全文検索を行う場合:
“富士通のデータベースを採用した顧客事例”に関連の深いOASYSタイプの文書を文書ボディーに含む行の書類番号と文書ボディーを検索します。
SELECT 書類番号,文書ボディー FROM 文書表 WHERE CONTAINS(文書ボディー, TEXT ( RANK, '$"富士通のデータベースを採用した 顧客事例" ')) >0 AND 書類タイプ = 'OASYS'
TEXT検索を使用して、ブーリアン検索モードで検索を複合検索条件指定で全文検索を行なう場合:
書名に“富士通”を含み、かつ概要に“Symfoware”を含む行の書名と概要を検索します。
ただし、以下のTextアダプタ定義(Textアダプタ定義名:text1)があるものとします。
<TextAdapterDef > ~ < MappingDef> < TargetSearchDBname >SearchDB1 </TargetSearchDBname> <Column name = ‘書名’> title </Column name> <Column name = ‘概要’> contents </Column name> < /MappingDef> </TextAdapterDef>
SELECT 書名,概要 FROM 文書表 WHERE CONTAINS( ‘text1’, TEXT ( BOOL, '@title:=富士通 & @contents:=Symfoware’) ) >0