4.2.9 concept_with_terms
(1) 機能
指定した種文章から検索用特徴タームと重みを抽出します。重みは,種文章から抽出される検索用特徴タームの中で重要度が最も高いタームを基準(100)として値が返却されます。なお,種文章から抽出する検索用特徴タームの個数の上限値は,n-gramインデクスプラグインの環境設定項目「検索用特徴ターム数」に依存します。
(2) 書式
concept_with_terms(列指定,概念検索条件式)
(3) 入力
-
列指定
-
概念検索条件式(BLOB)(最大5メガバイト)
(4) 戻り値
常にTRUE
(5) 詳細
-
列指定には,検索用特徴タームと重みを抽出するSGMLTEXT型の列名を指定します。なお,FREEWORD型の列は指定できません。
-
概念検索条件式には,検索する条件としての文章(種文章)を指定します。
-
概念検索条件式で指定できるのは単純文字列指定だけです。ほかの指定はエラーとなります。
-
concept_with_terms関数は,n-gramインデクスと協調して動作する検索述語であり,concept_with_terms関数使用時にインデクス型プラグイン(n-gramインデクスプラグイン)が使用できない状態の場合には,エラーとなります。
-
concept_with_terms関数は検索用特徴タームと重みを抽出し,terms_concept関数に値を受け渡す関数です(受け渡し値送信関数)。検索用タームと重みは,terms_concept関数で受け取ります(受け渡し値受信関数)。インデクス型プラグイン専用関数および受け渡し値送受信関数の実行方法に関する規則については,マニュアル「HiRDB UAP開発ガイド」を参照してください。
(6) SQL文の例
- 表「reports」のSGMLTEXT型の列「doc」に対して,種文章と似た文書を検索するための検索用特徴タームと重みを抽出する。
EXEC SQL BEGIN DECLARE SECTION; struct {long len; char data[4096];} sql; SQL TYPE IS BLOB(1M) excond; struct { short length ; char data[32000] ; }terms ; EXEC SQL END DECLARE SECTION; strcpy(sql.data, "SELECT terms_concept(doc) FROM reports WHERE concept_with_terms(doc, ? AS BLOB(1M)) IS TRUE ORDER BY 1 DESC"); sql.len = strlen(sql.data); strcpy(excond.excond_data, "{\"概念検索とは,検索条件として入力された文章と内容(概念)\ が似通った文書を検索する機能である。\"}"); excond.excond_length = strlen(excond.excond_data); EXEC SQL PREPARE sqlext FROM :sql; EXEC SQL DECLARE excrs CURSOR FOR sqlext; EXEC SQL OPEN excrs USING :excond; while(1) { EXEC SQL FETCH excrs INTO :terms; }