4.2.7 concept_with_score
(1) 機能
概念検索条件式に一致する文書を検索します。また,同時にスコア値の計算をします。
(2) 書式
concept_with_score(列指定,概念検索条件式)
(3) 入力
列指定
概念検索条件式(BLOB)(最大5メガバイト)
(4) 戻り値
常にTRUE
(5) 詳細
-
列指定には,概念検索をするSGMLTEXT型の列名称を指定します。なお,FREEWORD型の指定はできません。
-
概念検索条件式には,検索する条件としての文章(種文章)および検索対象の文書構造名を指定した条件式(BLOB)を指定します。
-
concept_with_score関数は,n-gramインデクスと協調して動作する検索述語です。concept_with_score関数使用時にインデクス型プラグイン(n-gramインデクスプラグイン)が使用できない状態の場合には,エラーとなります。
-
concept_with_score関数はスコア値を算出し,score_concept関数に値を受け渡す関数です(受け渡し値送信関数)。スコア値は,score_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; char title[8]; int score; EXEC SQL END DECLARE SECTION; strcpy(sql.data, "SELECT score_concept(doc), title FROM reports WHERE concept_with_score(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 :score, :title; } score_concept
(7) 注意事項
全文検索条件式には,複数の条件を"AND","OR"で指定できます。