本文へスキップ
`Ctrl`+`K`

# 7.13. grn_expr

grn_exprは特定の条件にマッチするレコードを検索したり、データベースを操作するオブジェクトです。 `ぐるんしき` と読みます。（由来は「Groongaの式」。）

データベースからレコードを検索する条件は条件式を集合演算で結合して表現できます。例えば、条件式には `等価条件式` や `小なり条件式` などがあります。集合演算には `積（AND）` 、 `和（OR）` 、 `差（NOT）` などがあります。gnr_exprはこれらの条件を使ってレコードを検索します。類似文書検索や近傍検索などといった高度な検索もgrn_exprで実行できます。柔軟な全文検索も実行できます。例えば、特定の単語にマッチしたときのヒットスコアを調整したり、検索結果数によって検索漏れの少ないアルゴリズムで再検索し、再現率を向上するといったことも実現できます。

grn_exprを作る方法は3つあります:

> - クエリー構文 の文字列をパースする。

> - スクリプト構文 の文字列をパースする。

> - grn_expr関連のAPIを呼ぶ。

クエリー構文 は一般的なインターネット検索サイトにある検索フォーム用の構文です。シンプルで使いやすいですが、制限があります。 クエリー構文 では実行できない条件式や集合演算があります。 クエリー構文 は select の `query` オプションで指定する検索条件で使えます。

スクリプト構文 はECMAScriptに似た構文です。 スクリプト構文 ではすべての条件式と集合演算を使えます。 スクリプト構文 は select の `filter` オプションで指定する検索条件や `scorer` オプションで指定する式で使えます。

groongaをライブラリとして使うと、grn_expr関連のAPIを呼び出してgrn_exprを作ることができます。 スクリプト構文 のように、APIを呼び出すと全ての機能を使えます。grn_exprを作る構文を新しく作るときにはAPIが便利です。APIは rroonga というGroongaのRubyバインディングで使われています。rroongaでは文字列をパースするのではなく、Rubyの構文を使ってgrn_exprを作ることができます。

- 7.13.1. クエリー構文
- 7.13.2. スクリプト構文

## 7.13.3. 参考

> - grn_expr: grn_expr関連のAPI