null+****@clear*****
null+****@clear*****
2010年 8月 4日 (水) 19:00:12 JST
Daijiro MORI 2010-08-04 10:00:12 +0000 (Wed, 04 Aug 2010) New Revision: 6e5a9310a8fc1bb5c17c71657a9d2eb66c6d3eeb Log: Added query.txt. Added files: doc/ja/source/developer/query.txt Added: doc/ja/source/developer/query.txt (+128 -0) 100644 =================================================================== --- /dev/null +++ doc/ja/source/developer/query.txt 2010-08-04 10:00:12 +0000 (259ec50) @@ -0,0 +1,128 @@ +.. highlightlang:: none + +クエリの実現 +============ + +groongaのデータストアには大量のデータを格納し、その中から必要な部分を高速に取り出すことができます。必要な部分をgroongaのデータストアに問い合わせるためのクエリの表現と実行に関して、groongaは複数の手段を用意しています。 + +クエリ実行のためのインタフェース +-------------------------------- + +groongaは低機能で単純なライブラリインタフェースから、高機能で複雑なコマンドインタフェースまでいくつかの階層的なインタフェースをユーザプログラムに提供しています。 + +クエリ実行のためのインタフェースも階層的なインタフェースのそれぞれに対応する形で用意されています。以下に低レイヤなインタフェースから順に説明します。 + +DB_API +^^^^^^ + +DB_APIは、groongaデータストアを操作するための一群のC言語向けAPI関数を提供します。DB_APIはデータストアを構成する個々の部分に対する単純な操作関数を提供します。DB_APIの機能を組み合わせることによって複雑なクエリを実行することができます。後述のすべてのクエリインタフェースはDB_APIの機能を組み合わせることによって実現されています。 + +grn_expr +^^^^^^^^ + +grn_exprは、groongaデータストアに対する検索処理や更新処理のための条件を表現するためのデータ構造で、複数の条件を再帰的に組み合わせてより複雑な条件を表現することができます。grn_exprによって表現されたクエリを実行するためには、grn_table_select()関数を使用します。 + +groonga実行ファイル +^^^^^^^^^^^^^^^^^^^ + +groongaデータストアを操作するためのコマンドインタープリタです。渡されたコマンドを解釈し、実行結果を返します。コマンドの実処理はC言語で記述されます。ユーザがC言語で定義した関数を新たなコマンドとしてgroonga実行ファイルに組み込むことができます。各コマンドはいくつかの文字列引数を受け取り、これをクエリとして解釈して実行します。引数をgrn_exprとして解釈するか、別の形式として解釈してDB_APIを使ってデータストアを操作するかはコマンド毎に自由に決めることができます。 + +grn_exprで表現できるクエリ +-------------------------- + +grn_exprは代入や関数呼び出しのような様々な操作を表現できますが、この中で検索クエリを表現するgrn_exprのことを特に条件式とよびます。条件式を構成する個々の要素を関係式と呼びます。条件式は一個以上の関係式か、あるいは条件式を論理演算子で結合したものです。 + +論理演算子は、以下の3種類があります。 + + && (論理積) + || (論理和) + ! (否定) + +関係式は、下記の11種類が用意されています。また、ユーザが定義した関数を新たな関係式として使うこともできます。 + + equal(==) + not_equal(!=) + less(<) + greater(>) + less_equal(<=) + greater_equal(>=) + match() + near() + similar() + prefix() + suffix() + +grn_table_select() +------------------ + +grn_table_select()関数は、grn_exprで表現された検索クエリを実行するときに使います。引数として、検索対象となるテーブル、クエリを表すgrn_expr、検索結果を格納するテーブル、それに検索にマッチしたレコードを検索結果にどのように反映するかを指定する演算子を渡します。演算子と指定できるのは下記の4種類です。 + + GRN_OP_OR + GRN_OP_AND + GRN_OP_BUT + GRN_OP_ADJUST + +GRN_OP_ORは、検索対象テーブルの中からクエリにマッチするレコードを検索結果テーブルに加えます。GRN_OP_OR以外の演算子は、検索結果テーブルが空でない場合にだけ意味を持ちます。GRN_OP_ANDは、検索結果テーブルの中からクエリにマッチしないレコードを取り除きます。GRN_OP_BUTは、検索結果テーブルの中からクエリにマッチするレコードを取り除きます。GRN_OP_ADJUSTは、検索結果テーブルの中でクエリにマッチするレコードに対してスコア値の更新のみを行います。 + +grn_table_select()は、データストア上にデータ構造を組み合わせて可能な限り高速に指定されたクエリを実行しようとします。 + +関係式 +------ + +関係式は、検索しようとしているデータが満たすべき条件を、指定した値の間の関係として表現します。ほとんどの関係式は、関係を調べようとする複数の値と、その関係が成り立ったときに評価されるコールバック関数、コールバック関数に渡される値とを引数として指定することができます。主な関係式について説明します。 + +equal() +^^^^^^^ +指定した二つの値が等しいことを表します。 + +not_equal() +^^^^^^^^^^^ +指定した二つの値が等しくないことを表します。 + +less() +^^^^^^ +一つ目の値が二つ目の値よりも小さいことを表します。 + +greater() +^^^^^^^^^ +一つ目の値が二つ目の値よりも大きいことを表します。 + +less_equal() +^^^^^^^^^^^^ +一つ目の値が二つ目の値と等しいか小さいことを表します。 + +greater_equal() +^^^^^^^^^^^^^^^ +一つ目の値が二つ目の値と等しいか大きいことを表します。 + +match() +^^^^^^^ +一つ目の値が二つ目の値を含んでいることを表します。また、一つ目の値が要素に分解されるとき、それぞれの要素に対して二つ目の要素が一致するための条件を以下のようにオプションとして指定することができます。 + + EXACT: 二つ目の値も一つ目の値と同様に要素に分解したとき、それぞれの要素が完全に一致する + UNSPLIT: 二つ目の値は要素に分解しない + PREFIX: 一つ目の値の要素が二つ目の値に前方一致する + SUFFIX: 一つ目の値の要素が二つ目の値に後方一致する + PARTIAL: 一つ目の値の要素が二つ目の値に中間一致する + +near() +^^^^^^ +一つ目の値の中に、二つ目の値の要素が接近して含まれていることを表します。 + +similar() +^^^^^^^^^ +一つ目の値と二つ目の値が類似していることを表します。 + +prefix() +^^^^^^^^ +一つ目の値が二つ目の値に対して前方一致することを表します。 + +suffix() +^^^^^^^^ +一つ目の値が二つ目の値に対して後方一致することを表します。 + +クエリの実例 +============ + +grn_exprを使って様々な検索クエリを表現することができます。 +