データベースに格納したデータに対して全文検索を適用する場合は、SQLのCONTAINS関数を使用します。CONTAINS関数により、指定した列に対応するフィールドに対して、指定した検索条件に該当する全文検索を実行することができます。
CONTAINS関数の記述形式を以下に示します。CONTAINS関数の詳細は、以下の図を参照してください。
CONTAINS(列指定,‘検索条件’,ランキングスコア列名)
|
列指定には、全文検索の対象とするデータが格納されている列を指定します。
検索条件には、検索したいキーワードとそれらを結合する演算子から構成されます。なお、演算子は省略することができます。演算子を省略した場合、論理積演算子が指定されたものとみなします。
参照
Accela BizSearchの検索条件式については、“Accela BizSearch プログラマーズガイド”を参照してください。
ランキングスコア列名は、ランキングスコア値を取出す場合に指定します。取り出したランキングスコア値(ランキング列名)をORDER BY句に指定してソートする等を実施することができます。ランキングスコア列名は省略可能です。
CONTAINS関数の結果は、検索条件で指定した検索キーワードの出現率を表すランキングスコア値(REAL型)です。出現率が高ければより大きな値となり、検索キーワードが一致しない場合、0を返します。
以下に、CONTAINS関数の使用例を示します。
図2.14 CONTAINS関数による検索例
この例では、「概要」列に対して、検索条件「富士通 | FUJITSU」(キーワード「富士通」または「FUJITSU」を含む)が一致する行の「コード」「書名」「概要」列のデータを選択しています。
Textアダプタ定義によって「概要」列とAccela BizSearchのインデックスに存在するフィールド「contents」が対応しており、CONTAINS関数はフィールド「contents」に対して指定した検索条件にしたがって検索を行います。
また、CONTAINS関数は、以下に示すように、他の列の条件と組み合わせて使用することもできます。
SELECT コード,書名,概要 FROM 書籍スキーマ.書籍表 WHERE コード>10 AND CONTAINS(概要,'富士通| FUJITSU') > 0 |
この例では、「コード」列が10より大きくかつ、検索条件「富士通 | FUJITSU」(キーワード「富士通」または「FUJITSU」を含む)が一致する行の「コード」「書名」「概要」列のデータを選択しています。
検索動作の違いやスコア計算の有無により、以下の3種類の検索モードを選択することができます。これは、Accela BizSearchがサポートする検索モードと同じものです。
ブーリアン検索モード
ランキングブーリアン検索モード
ランキング検索モード
検索モードは、以下のように検索条件に検索モードを指定することで選択することができます。検索モードを指定しない場合、検索モードはランキングブーリアン検索モードとなります。
|
備考1.各検索モードで、ランキングスコア列名は、省略可能です。
備考2.ブーリアン検索モードの場合、検索結果として通知されるランキングスコア値は、一致している場合「1」、不一致の場合「0」を返します。
参照
検索モードの詳細と各検索モードで指定可能な演算子/識別子については、“Accela BizSearch 開発キット 全文検索システム”を参照してください。