3.5. grn式 (grn_expr)

3.5.1. 名前

grn式 - 検索条件やデータベースへの操作を表現する文字列の形式。(読み方:”ぐるんしき”)

3.5.2. 説明

grn式は、検索条件やデータベースへの操作を表現するために使用される文字列の形式です。

selectやloadなどのいくつかの組込コマンドや、API関数grn_table_select()などで使用されます。grn式はquery形式とscript形式という2種類の方式で記述することができます。query形式は、多くのweb検索エンジンなどで検索フォームにユーザが指定可能なクエリ文字列の書式に合わせた形式です。script形式は、ECMAScriptの構文から式(expression)以下の構文要素を抜粋した形式になっており、文(statement)や制御構造などは表現できません。

query形式のgrn式もscript形式のgrn式も、共通の中間形式に翻訳された上で処理されますので、処理速度や効率には差違はありません。記述できる処理の範囲はscript形式の方がquery形式より広くなっています。たとえば更新系の操作はscript形式のみで記述できます。

DB-APIレイヤでは、異なる形式で記述された複数のgrn式を結合することも可能です。

3.5.3. 例

query形式でcolumn1の値が’hoge’に等しいという条件

column1:hoge

script形式でcolumn1の値が’hoge’に等しいという条件

column1 == “hoge”

3.5.4. query形式

3.5.4.1. 条件式

以下の条件式が使用できます。

文字列
全文検索条件(デフォルト検索対象カラムの値が指定された文字列を含んでいる)
“文字列”
フレーズ検索条件(デフォルト検索対象カラムの値が指定されたフレーズを含んでいる)
カラム名:値
一致条件(カラム値 == 値)
カラム名:!値
不一致条件(カラム値 != 値)
カラム名:<値
比較条件(カラム値 < 値)
カラム名:>値
比較条件(カラム値 > 値)
カラム名:<=値
比較条件(カラム値 <= 値)
カラム名:>=値
比較条件(カラム値 >= 値)
カラム名:@文字列
全文検索条件(カラム値が指定された文字列を含んでいる)
カラム名:^文字列
前方一致条件(カラム値が指定された文字列に前方一致する)
カラム名:$文字列
後方一致条件(カラム値が指定された文字列に後方一致する)

3.5.4.2. 補助演算子

全文検索条件の挙動を制御する以下の演算子が指定できます。[#]_

~文字列
文字列を含んでいた場合は、そのレコードのスコアを下げます。
<文字列
文字列を含んでいた場合に加算されるスコアの値を小さくします。
>文字列
文字列を含んでいた場合に加算されるスコアの値を大きくします。
文字列*
文字列に前方一致する条件を示します。
*S[数値]”文字列”
文字列と関連する文書を検索します。文字列から抽出する特徴語の数を数値に指定します。
*N[数値]”文字列”
文字列に含まれる複数の語が、近傍に含まれる文書を検索します。近傍の範囲の上限となる語数を数値に指定します。N-gramの場合は、文字数を指定します。

3.5.4.3. 結合演算子

複数の条件式を結合するために以下の演算子が使用できる。演算子を伴わずに複数の条件式が空白(‘ ‘)区切りで指定された場合は、デフォルトの結合演算子が指定されたものとみなされる。

a OR b
論理和(aとbといずれかの条件がマッチする)
a + b
論理積(aとbの両方がマッチする)
a - b
aにマッチし、bにはマッチしない
( )
複数の条件をまとめる

3.5.4.4. プラグマ

query形式文字列の先頭に、処理方法を指定するプラグマを埋め込むことができます。[#]_

プラグマは必ずクエリ文字列の冒頭に存在しなければなりません。(先頭に空白を入れてはいけません)

一つのクエリに複数のプラグマを指定することができます。

複数のプラグマを指定する場合は、間に空白を入れてはいけません。

*E数値1[,数値2]

検索結果の数が数値1よりも小さい場合、完全一致→非わかち書き→部分一致の順に自動的に検索処理方法を切り替えます。完全一致でヒットした文書と比べて非わかち書き一致、部分一致でヒットした文書には数値2分だけ小さいスコアを付与します。数値2を省略した場合は既定値(=2)と解釈されます。数値1に負の数を指定した場合は以下のように処理します。

-1 完全一致検索のみを行う
-2 非わかち書き検索のみを行う
-3 完全一致検索と非わかち書き検索のみを行う
-4 部分一致検索のみを行う
-5 完全一致検索と部分一致検索のみを行う
-6 非わかち書き検索と部分一致検索のみを行う
-7 完全一致検索,非わかち書き検索,部分一致検索の全てを行う

例:

*E10,3

検索結果数が10件以下だった場合に検索処理方法を順次切り替え、スコアを3ずつ小さくします。

*D演算子

結合演算子の既定値(演算子を省略した場合にどの演算を行うか)を指定します。指定できる演算子は、OR, +, - のいずれかです。

例1:

*D+ abc def

abcとdefを両方含む文書を検索します。

例2:

*DOR abc def

abcとdefのいずれかを含む文書を検索します。

*W[数値[:重み][,数値[:重み]]...

数値で指定されたセクション番号のみを対象に検索します。セクションごとに検索スコアの倍数を指定することができます。重みは、省略された場合1となります。負の重みも指定することができます。

3.5.5. script形式

ECMAScript風の構文で検索条件やレコードへの操作を記述します。[#]_

式中のIDENTIFIER(識別子)は、以下のいずれかを指します。

引数名:grn式が受け取る引数の名前
カラム名:操作対象としているレコードのカラム名
型名・関数名・テーブル名:データベースに定義された型・テーブル・関数の名前

脚注

[1]補助演算子はv1.0でサポートされます。
[2]プラグマはv1.0でサポートされます。
[3]script形式のgrn式はv1.0でサポートされます。