edmSQLでは,基本的なSQLの文法で表現できないDocumentBrokerの拡張検索機能を,関数として提供します。
edmSQLが提供する関数には,HiRDBの拡張検索機能を使用するための関数と,edmSQLで独自に拡張した関数があります。
それぞれの関数について説明します。
- HiRDBの拡張検索機能(HiRDB Text Search Plug-inおよびHiRDB Text Search Plug-in Conceptual Extensionを使用した検索の機能)を使用するための関数(DBMS関数)
DBMS関数には,次の2種類があります。
- 全文検索関数(概念検索を含まない全文検索をするための関数)
- 概念検索関数
DBMS関数は,データベース上で,データベースの制限に従って実行されます。
- edmSQLで独自に拡張した関数(edmSQL関数)
edmSQL関数として提供されているのは,変換関数です。
edmSQL関数は,データベースへのアクセスの前後で実行されます。
なお,この項で説明する<関数>には,SQLの基本機能として提供されている<集合関数>および<数値関数>は含みません。
- <この項の構成>
- (1) 文書検索関数(DBMS関数)
- (2) 変換関数(edmSQL関数)
<文書検索関数>には,次の機能があります。
- 全文検索機能(概念検索を含まない全文検索)
- 概念検索機能
<文書検索関数>では,次に示す関数が定義されています。なお,以降,関数の説明で使用する"<全文検索関数>"という表記は,概念検索の機能を持たない全文検索を実行するための関数を表します。
- 全文検索関数
- contains関数
- cotains_with_score関数
- score関数
- extracts関数
- 概念検索関数
- concept_with_score関数
- score_concept関数
なお,全文検索関数を実行する場合は,HiRDB Text Search Plug-inが必要です。
また,概念検索関数を実行する場合は,HiRDB Text Search Plug-inおよびHiRDB Text Search Plug-in Conceptual Extensionが必要です。
(a) 形式
!! <文書検索関数>の形式
<文書検索関数> ::= <全文検索関数>
|<概念検索関数>
!! <全文検索関数>の形式
<全文検索関数> ::= <contains関数>
|<contains_with_score関数>
|<score関数>
|<extracts関数>
!! <contains関数>の形式
<contains関数> ::= contains <左括弧><プロパティ指定>
<コンマ><全文検索条件><右括弧>
!! <contains_with_score関数>の形式
<contains_with_score関数> ::= contains_with_score
<左括弧><プロパティ指定>
<コンマ><全文検索条件><右括弧>
!! <score関数>の形式
<score関数> ::= score <左括弧><プロパティ指定><右括弧>
!! <extracts関数>の形式
形式1
<extracts関数> ::= extracts <左括弧><プロパティ指定><コンマ>
<抽出対象構造文字列> <コンマ>
<全文検索条件> <コンマ>
<ハイライトタグ文字列> <右括弧>
形式2
<extracts関数> ::= extracts <左括弧><全文検索機能付き文字列型プロパティ><右括弧>
!! <概念検索関数>の形式
<概念検索関数> ::= <concept_with_score関数>
|<score_concept関数>
!! <concept_with_score関数>の形式
<concept_with_score関数> ::= concept_with_score
<左括弧><プロパティ指定>
<コンマ><概念検索条件><右括弧>
!! <score_concept関数>の形式
<score_concept関数> ::= score_concept
<左括弧><プロパティ指定><右括弧>
!! <全文検索条件><概念検索条件><抽出構造文字列>および<ハイライトタグ文字列>の形式
<全文検索条件> ::= <文字列リテラル> | <?パラメタ>
<概念検索条件> :: = <?パラメタ>
<抽出対象構造文字列> ::= <文字列リテラル> | <?パラメタ>
<ハイライトタグ文字列> ::= <文字列リテラル> | <?パラメタ>
!! <全文検索条件>,<概念検索条件>,<抽出対象構造文字列>
!! および<ハイライトタグ文字列>の指定方法については,
!! マニュアル「HiRDB Text Search Plug-in」を参照してください。
(b) <文書検索関数>
<文書検索関数>は,次の形式で定義されています。
<文書検索関数> ::= <全文検索関数>|<概念検索関数>
- <文書検索関数>の規則
- <文書検索関数>は,HiRDB Text Search Plug-inの機能によって提供されている検索機能をedmSQLで使用するための関数です。
この関数で実行する検索の検索条件の指定方法については,マニュアル「HiRDB Text Search Plug-in」を参照してください。ただし,関数の第1引数には,列ではなくDocumentBrokerのプロパティを指定します。
- 第1引数の<プロパティ指定>に指定できるのは,その関数で指定できる<特殊なプロパティ>だけです。
- <文書検索関数>は,<結合条件>には指定できません。
(c) <全文検索関数>
全文検索関数には,次の種類があります。なお,この関数で実行する全文検索に,概念検索は含まれません。
- contains関数
全文検索を実行します。
- contains_with_score関数
全文検索を実行すると同時に,スコア値を算出します。
- score関数
contains_with_score関数で算出したスコア値を取得します。
- extracts関数
文書からテキストデータを抽出します。抽出するデータは,構造を持つ文書の特定の構造にハイライトタグを埋め込んだデータです。
(d) <contains関数>
contains関数の詳細について説明します。
- 関数名
- contains
- 形式
contains <左括弧><プロパティ指定><コンマ><全文検索条件><右括弧>
- 引数
- <プロパティ指定>(<特殊なプロパティまたは全文検索機能付き文字列型プロパティ>)
- ●特殊なプロパティの場合
- 検索対象の文書クラスが特定できる形式でプロパティを指定します。
- 指定できるのは,次の<特殊なプロパティ>です。
- edmProp_StIndexプロパティ
- edmProp_TextIndexプロパティ
- edmProp_Contentプロパティ
- edmProp_ConceptTextIndexプロパティ
- edmProp_ConceptStIndexプロパティ
- ●全文検索機能付き文字列型プロパティの場合
- 全文検索機能付き文字列型プロパティを指定します。
- <全文検索条件>(String型の値:STRING(32000))
- 全文検索条件を指定します。
- 検索タームを含む文書が検索されます。
- <全文検索条件>には,検索タームのほか,構造指定検索,同義語異表記展開検索および近傍条件検索などを実行するための検索条件を文字列で指定します。指定方法については,マニュアル「HiRDB Text Search Plug-in」を参照してください。
- <全文検索条件>に<?パラメタ>を指定する場合は,次のようにAS<データ型指定>をします。
? AS STRING(32000)
- 機能
- <プロパティ指定>で指定したプロパティに対応する文書の内容(コンテント)に対して,<全文検索条件>で指定した条件で,全文検索を実行します。
- 評価値
- Boolean型(評価)
- 属性
- この関数は,<WHERE句>の<検索条件>に指定できます。
(e) <contains_with_score関数>
contains_with_score関数の詳細について説明します。
- 関数名
contains_with_score
- 形式
contains_with_score <左括弧><プロパティ指定><コンマ><全文検索条件><右括弧>
- 引数
- <プロパティ指定>(<特殊なプロパティ>)
- 検索対象の文書クラスが特定できる形式でプロパティを指定します。
- 指定できるのは,次の<特殊なプロパティ>です。
- edmProp_TextIndexプロパティ
- edmProp_StIndexプロパティ
- edmProp_Contentプロパティ
- edmProp_ConceptTextIndexプロパティ
- edmProp_ConceptStIndexプロパティ
- <全文検索条件>(String型の値:STRING(32000))
- 全文検索条件を指定します。全文検索条件に指定した検索タームが含まれる文書が検索されます。定義長は32,000バイトです。
- <全文検索条件>には,検索タームのほか,構造指定検索や同義語異表記展開検索,近傍条件検索などの検索を実行するための検索条件を文字列で指定します。指定方法については,マニュアル「HiRDB Text Search Plug-in」を参照してください。
- <全文検索条件>に<?パラメタ>を指定する場合は,次のようにAS<データ型指定>をします。
? AS STRING(32000)
- 機能
- <プロパティ指定>で指定したプロパティに対応する文書に対して,<全文検索条件>で指定した条件で,全文検索を実行します。
- このとき,検索結果として取得した文書から,全文検索条件が含まれる割合を,スコアとして算出します。
- 算出したスコアの取得には,<score関数>を使用します。
- 評価値
- Boolean型(評価)
- 属性
- この関数は,<WHERE句>の<検索条件>に指定できます。
(f) <score関数>
<score関数>の詳細について説明します。
- 関数名
- score
- 形式
- score <左括弧><プロパティ指定><右括弧>
- 引数
- <プロパティ指定>(<特殊なプロパティ>)
- スコアの値を取得する文書クラスが特定できる形式でプロパティを指定します。
- 指定できるのは,次の<特殊なプロパティ>です。
- edmProp_TextIndexプロパティ
- edmProp_StIndexプロパティ
- edmProp_Contentプロパティ
- edmProp_ConceptTextIndexプロパティ
- edmProp_ConceptStIndexプロパティ
- 機能
- <conatins_with_score関数>で検索結果として取得した文書に対して,文書の検索条件に対するスコア値(全文検索条件が含まれる割合に応じた値)を返却します。
- 評価値
- スコア値(Integer32型)
- 属性
- この関数は,<SELECT句>の<選択項目>に指定できます。
(g) <extracts関数>
<extracts関数>は,検索結果として取得する文書から,テキストデータを抽出する関数です。
<extracts関数>は,次の関数と組み合わせて使用することで,全文検索条件を満たした文書のテキストデータを抽出できます。
- contains関数
- contains_with_score関数
また,次の関数と組み合わせて使用することで,全文検索条件を満たした全文検索機能付き文字列型プロパティを抽出できます。
<extracts関数>の詳細について説明します。
- 関数名
- extracts
- 形式1
extracts <左括弧><プロパティ指定><コンマ><抽出対象構造文字列><コンマ><全文検索条件><コンマ><ハイライトタグ文字列><右括弧>
- 形式2
extracts<左括弧><全文検索機能付き文字列型プロパティ><右括弧>
- 引数
- <プロパティ指定>(<特殊なプロパティ>)
- 抽出対象の文書クラスが特定できる形式でプロパティを指定します。
- 指定できるプロパティは,次の<特殊なプロパティ>です。
- edmProp_TextIndexプロパティ
- edmProp_StIndexプロパティ
- edmProp_Contentプロパティ
- edmProp_ConceptStIndexプロパティ
- edmProp_ConceptTextIndexプロパティ
- <全文検索機能付き文字列型プロパティ>
- 全文検索機能付き文字列型プロパティを指定します。
- <抽出対象構造文字列>(String型の値:STRING(1024))
- 抽出対象にする構造を表す文字列を指定します。
- 構造を指定しない場合は,「''」(空文字列)を指定してください。
- <抽出対象構造文字列>に<?パラメタ>を指定する場合は,次のようにAS<データ型指定>をします。
? AS STRING(1024)
- <全文検索条件>(String型の値:STRING(32000))
- ハイライト表示する検索タームを指定します。
- 条件を指定しない場合は,「''」(空文字列)を指定してください。この場合,ハイライトタグは挿入されません。
- <全文検索条件>に<?パラメタ>を指定する場合は,次のようにAS<データ型指定>をします。
? AS STRING(32000)
- <ハイライトタグ文字列>(String型の値:STRING(255))
- ハイライト表示に使用するタグを表す文字列を指定します。
- ハイライトタグを指定しない場合は,「''」(空文字列)を指定してください。この場合,ハイライトタグは挿入されません。
- <ハイライトタグ文字列>に<?パラメタ>を指定する場合は,次のようにAS<データ型指定>をします。
? AS STRING(255)
- 機能
- <プロパティ指定>で指定したプロパティに対応する文書の内容(コンテント)から,<抽出指定構造文字列>および<全文検索条件>で指定した文字列に<ハイライトタグ文字列>に指定したタグ(文字列)を埋め込んだ状態で抽出します。
- HiRDB Text Search Plug-inの「SGML出力」に対応します。
- また,<全文検索機能付き文字列型プロパティ>で指定した全文検索機能付き文字列型プロパティの値を抽出します。
- 評価値
- 抽出したテキストまたはプロパティの値(Binary型データ)
- 抽出するデータは,HiRDB Text Search Plug-inのBLOB型で2ギガバイトまでのデータです。ただし,DocumentBrokerのクラスライブラリの検索結果としては,String型の値に変換されて,取得します。
- 属性
- この関数は,<SELECT句>の<選択項目>に指定できます。
- ただし,この関数を<SELECT句>に指定した場合,<集合指定子>としてDISTINCTは指定できません。
(h) <概念検索関数>
概念検索関数には,次の種類があります。
- concept_with_score関数
概念検索を実行すると同時に,スコア値を算出します。
- score_concept関数
concept_with_score関数で算出したスコア値を取得します。
(i) <concept_with_score関数>
<concept_with_score関数>の詳細について説明します。
- 関数名
- concept_with_score
- 形式
concept_with_score <左括弧><プロパティ指定><コンマ><概念検索条件><右括弧>
- 引数
- <プロパティ指定>(<特殊なプロパティ>)
- 検索対象の文書クラスが特定できる形式でプロパティを指定します。
- 指定できるプロパティは,次の<特殊なプロパティ>です。
- edmProp_ConceptTextIndex
- edmProp_ConceptStIndex
- <概念検索条件>(Binary型のデータ:BINARY(5m))
- 概念検索条件を指定します。概念検索条件には,種文章を指定します。種文章を含む<概念検索条件>を指定する場合には,必ず<?パラメタ>を使用して指定してください。また,ここで指定する<?パラメタ>には,構造指定検索や同義語異表記検索などの検索を実行するための検索条件も指定します。指定方法については,マニュアル「HiRDB Text Search Plug-in」を参照してください。
- <概念検索条件>を<?パラメタ>で指定する場合は,次のようにAS<データ型指定>をします。
? AS BINARY(5m)
- AS<データ型指定>を含んだ,concept_with_score関数を呼び出す論理述語は,次のように指定します。
concept_with_score(edmProp_ConceptStIndex,
? AS BINARY(5m)) IS TRUE
- 機能
- <プロパティ指定>で指定したプロパティに対応する文書の内容(コンテント)に対し,<概念検索条件>で指定した条件で,概念検索を実行します。
- また,検索実行時に,検索結果として取得した文書から検索用特徴タームが含まれる割合をスコアとして算出します。
- このスコアを取得する場合は,<score_concept関数>を使用します。
- 評価値
- Boolean型(評価)
- 属性
- この関数は,<WHERE句>の<検索条件>に指定できます。
(j) <score_concept関数>
<score_concept関数>の詳細について説明します。
- 関数名
- score_concept
- 形式
- score_concept <左括弧><プロパティ指定><右括弧>
- 引数
- <プロパティ指定>(<特殊なプロパティ>)
- スコアの値を取得する文書クラスが特定できる形式でプロパティを指定します。
- 指定できるのは,次の<特殊なプロパティ>です。
- edmProp_ConceptTextIndexプロパティ
- edmProp_ConceptStIndexプロパティ
- 機能
- <concept_with_score関数>で検索結果として取得した文書に対して,文書の検索条件に対するスコア値(検索用特徴タームが含まれる割合に応じた値)を返却します。
- 評価値
- スコア値(Integer32型)
- 属性
- この関数は,<SELECT句>の<選択項目>に指定できます。
<変換関数>は,Object型の値を,クラスライブラリで扱えるデータ型に変換するための関数です。クラスライブラリでは,VariableArray型プロパティを表すObject型の値以外は,すべてOIID文字列として扱います。
<変換関数>には,<選択可能な変換関数>と<検索可能な変換関数>があります。
(a) 形式
!! <変換関数>の形式
<変換関数> ::= <選択可能な変換関数>
|<検索可能な変換関数>
<選択可能な変換関数> ::= <oiidstr関数>
<検索可能な変換関数> ::= <objref関数>
|<oiid関数>
!! <oiidstr関数>の形式
<oiidstr関数> ::= oiidstr <左括弧> <プロパティ指定> <右括弧>
!! <objref関数>の形式
<objref関数> ::= objref<左括弧> <OIID文字列> <右括弧>
!! <oiid関数>の形式
<oiid関数> ::= oiid<左括弧> <OIID文字列> <右括弧>
<OIID文字列> ::= <文字列リテラル>
(b) <変換関数>
<変換関数>は,データベースで処理する関数ではなく,DocumentBrokerサーバでedmSQLを発行した前後にデータの変換を実行する関数です。
<変換関数>には,<選択可能な変換関数>と<検索可能な変換関数>があります。<選択可能な変換関数>は,主問い合わせの<選択項目>だけに指定できます。<検索可能な変換関数>は,<検索条件>だけに指定できます。なお,<変換関数>は,<結合条件>には指定できません。
これら関数では,次の変換ができます。
- オブジェクトリファレンス(Object型の値)からOIID文字列(String型の値)への変換
- OIID文字列からオブジェクトリファレンス(Object型の値)をOIID文字列(String型の値)への変換
- OIID文字列からdmaProp_OIIDプロパティの値への変換
(c) <oiidstr関数>
<oiidstr関数>の詳細について説明します。
- 関数名
- oiidstr
- 形式
- oiidstr <左括弧><プロパティ指定><右括弧>
- 引数
- <プロパティ指定>(VariableArray型以外のObject型の値)
- 機能
- Object型の値であるオブジェクトリファレンスを,OIID文字列表記に変換します。
- 評価値
- String型の値。
- OIID文字列表記を,String型の値として返却します。
- 属性
- <選択可能な変換関数>
- この関数は,<SELECT句>の<選択項目>に指定できます。
(d) <objref関数>
<objref関数>の詳細について説明します。
- 関数名
- objref
- 形式
- objref <左括弧> <OIID文字列><右括弧>
- 引数
- <OIID文字列>(String型の値)
- 機能
- <OIID文字列>(String型の値)を,オブジェクトリファレンス(Object型の値)に変換します。
- 評価値
- Object型の値。
- オブジェクトリファレンスを,Object型の値として返却します。
- 属性
- <検索可能な変換関数>
- この関数は,<WHERE句>の<検索条件>に指定できます。
(e) <oiid関数>
<oiid関数>の詳細について説明します。
- 関数名
- oiid
- 形式
- oiid <左括弧><OIID文字列><右括弧>
- 引数
- <OIID文字列>(Sring型の値)
- 評価値
- String型の値。
- 実際にdmaProp_OIIDプロパティに格納されている形式(16バイトの値)のString型の値を返却します。
- 属性
- <検索可能な変換関数>
- この関数は,<WHERE句>の<検索条件>に指定できます。