grn式 - 検索条件やデータベースへの操作を表現する文字列の形式。(読み方:”ぐるんしき”)
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式を結合することも可能です。
query形式でcolumn1の値が’hoge’に等しいという条件
column1:hoge
script形式でcolumn1の値が’hoge’に等しいという条件
column1 == “hoge”
以下の条件式が使用できます。
全文検索条件の挙動を制御する以下の演算子が指定できます。[#]_
複数の条件式を結合するために以下の演算子が使用できる。演算子を伴わずに複数の条件式が空白(‘ ‘)区切りで指定された場合は、デフォルトの結合演算子が指定されたものとみなされる。
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 defabcとdefを両方含む文書を検索します。
例2:
*DOR abc defabcとdefのいずれかを含む文書を検索します。
*W[数値[:重み][,数値[:重み]]...
数値で指定されたセクション番号のみを対象に検索します。セクションごとに検索スコアの倍数を指定することができます。重みは、省略された場合1となります。負の重みも指定することができます。
ECMAScript風の構文で検索条件やレコードへの操作を記述します。[#]_
式中のIDENTIFIER(識別子)は、以下のいずれかを指します。
引数名: | grn式が受け取る引数の名前 |
---|---|
カラム名: | 操作対象としているレコードのカラム名 |
型名・関数名・テーブル名: | データベースに定義された型・テーブル・関数の名前 |
脚注
[1] | 補助演算子はv1.0でサポートされます。 |
[2] | プラグマはv1.0でサポートされます。 |
[3] | script形式のgrn式はv1.0でサポートされます。 |