複数のカラムに対する全文検索#Groongaでは、複数のカラムを対象とした全文検索を行うことができます。ブログのテーブルで、タイトルと内容とがそれぞれ別のカラムに入ったものがあるとしましょう。「タイトルもしくは内容に特定の単語を含む」検索を行いたいとします。この場合、2つのインデックス作成方式があります。1つは、それぞれのカラムに1つずつインデックスを付与する方式です。1つは、複数のカラムに対して1つのインデックスを付与する方式です。Groongaでは、どちらの形式のインデックスが存在している場合でも、同一の記法で全文検索を行うことができます。カラムごとにインデックスを付与する場合#カラムごとにインデックスを作成する方法はこの通りです。カラムにブログの本文を保存します。カラムと、それぞれ1カラムごとに1つずつ追加しています。オプションで、検索対象のカラムを複数指定することが出来ます。オプションで指定します。これを使うことで、タイトルと本文を全文検索することができます。実際にブログエントリを検索してみましょう。複数のカラムにまたがったインデックスを付与する場合#Groongaでは複数のカラムにまたがったインデックスもサポートしています。インデックスカラムが1つしかないというのが違いです。2つのカラムに対するインデックスが共通になっています。カラムでの検索、全ての検索を行うことができます。[[0,1337566253.89858,0.000355720520019531],3]実際に前と同じ例で検索してみましょう。結果は上の例と同じになります。]注釈"インデックスはどちらがよい方法なのか"と疑問に思うかもしれません。それは場合によります。マルチカラムインデックスよりも更新性能が良い傾向があります。ディスク使用効率はあまり良くありません。バッファを共有するためディスク使用効率が良いです。更新性能があまり良くありません。インデックス名を指定した全文検索#Groongaは、インデックス名を指定した全文検索もサポートしています。このセクションでは、インデックス名を指定した全文検索の方法を学びます。インデックス名の指定について具体的な例を示します。カラムを持つテーブルがあります。カラムのインデックスを持っています。語彙表には、3つのインデックスカラムがあります。インデックスカラム特定のデータカラムと結びついたインデックスカラムを指定した場合は、暗黙的にそのデータカラムだけを検索します。インデックスカラムに指定します。カラムを対象に"Groonga"を検索します。カラムを対象に"Groonga"を検索します。複数カラムにまたがるインデックスは、インデックスカラムの後にデータカラム名を指定することができます。これは、どのインデックスを使ってどのデータカラムを検索するかを明示しています。カラムを対象に検索します。カラムを対象に"Groonga"を検索します。カラムを対象に"Groonga"を検索します。カラムインデックスによる関連テーブルをまたぐ検索#複数のテーブルがカラムインデックスで関連付けられているなら、参照カラム名を指定して複数のテーブルにまたがって検索することができます。具体的な例を示します。ブログ記事や記事のコメントを保存するテーブルがあります。記事を保存するテーブルには記事とコメントのためのカラムがあります。そのコメントカラムはCommentsテーブルを参照しています。コメントを保存するテーブルにはコメントと記事テーブルに対するカラムインデックスが設定されています。特定のキーワードをコメントに含む記事を探すには、コメントテーブルを全文検索する必要があり、全文検索結果を含むレコードをさらに検索する必要があります。カラムインデックスを指定することで一度にレコードを検索することができます。サンプルのスキーマ定義はこちらです。[[0,1337566253.89858,0.000355720520019531],true]サンプルデータはこちらです。[[0,1337566253.89858,0.000355720520019531],3]特定のキーワードをコメントに含むレコードを検索するクエリを書くことができ、それによりレコードを参照する記事を取得します。引数とする必要があります。最初に、このクエリはCommentsテーブルのcontentを全文検索し、次にCommentsテーブルを検索した結果のレコードを参照するArticlesテーブルのレコードを取得します。インデックスカラムを生成するクエリをコメントアウトすると、意図した検索結果が得られません。]これで、特定のキーワードをコメントとして含む記事を検索できます。このネストしたインデックスの検索という特徴には関連するテーブルが2つだけに制限されません。前のものと似たサンプルのスキーマ定義です。違いは'返信'を表現するテーブルの追加と関連するテーブルが3つに増えたことです。[[0,1337566253.89858,0.000355720520019531],true]サンプルデータはこちらです。