では、データを
Documentとして保存できるようになったところで、次は「保管されている
Documentを取り出して一覧表示する」ということを行いましょう。
これは、Searchの要である「全文検索」の初歩といえるものです。検索の基本的な流れは全文検索そのものですが、検索条件などの部分は空っぽ、というものです。これがわかれば、全文検索の機能の半分はわかった、といってよいでしょう。
Documentの検索は、検索するインデックスの「
Index」インスタンスにある「
search」メソッドで行えます。これは引数に検索に関する条件を指定して呼び出すものです。この引数は、テキストで指定をすることもできますが、今回は「
Query」クラスを利用したやり方を使ってみます。
Queryクラスは、文字通り全文検索のクエリー(検索のための命令文)を管理するためのものです。これは、Query作成のための「
Query.Builder」というクラスのインスタンスを作成し、これに必要な設定を行なってから作成をします。以下に整理しましょう。
1. Query.Builderの作成Query.Builder 変数 = Query.newBuilder();
2. クエリーの設定を行う《Query.Builder》.setOptions(《QueryOptions》);
3. Queryの生成Query 変数 = 《Query.Builder》.build();
基本的な流れは特に難しくはありません。これらはメソッドチェーンを利用して一続きに記述することも可能です。ここでポイントとなるのは、設定情報をまとめた「
QueryOptions」でしょう。これは以下のように作成をします。
1. QueryOptions.Builderインスタンスを用意するQueryOptions 変数 = QueryOptions.newBuilder();
2. 諸設定を行う《QueryOptions.Builder》.setLimit( 最大項目数 );
《QueryOptions.Builder》.setOffset( 検索開始位置 );
《QueryOptions.Builder》.setFieldsToReturn( フィールド名1, フィールド名2,……);
《QueryOptions.Builder》.setSortOptions(《SortOptions》);
3. QueryOptionsを生成するQueryOptions 変数 = 《QueryOptions.Builder》.build();
諸設定は、とりあえず「取得する最大項目数」「取得するフィールドの設定」「ソートの設定」といった基本的なものだけ挙げておきました。とりあえず、これだけわかればOKでしょう。――ただし! これまた、ソートの設定には「
SortOption」というものを用意しないといけません。これも整理しておきます。
1.SortOptions.Builderを用意するSortOptions.Builder 変数 = SortOptions.newBuilder();
2. ソート条件のSortExpressionを追加する《SortOptions.Builder》.addSortExpression(《SortExpression》);
3. SortOptionsを生成するSortOptions 変数 = 《SortOptions.Builder》.build();
さあ、また登場しました。ソート条件の設定をする
SortExpressionクラス。これも以下に作り方を整理しておきましょう。
1. SortExpression.Builderを用意するSortExpression.Builder 変数 = SortExpression.newBuilder();
2. ソートで使用するフィールドを設定する《SortExpression.Builder》.setExpression( フィールド名 );
3. 昇順・降順を指定する《SortExpression.Builder》.setDirection( SortDirection.ASCENDINGまたはDESCENDING );
4. デフォルト値を指定する《SortExpression.Builder》.setDefaultValue( テキスト );
《SortExpression.Builder》.setDefaultValueNumeric( 数値);
5. SortExpressionを生成するSortExpression 変数 = 《SortExpression.Builder》.build();
――これらは、必ずしもすべて用意する必要はありません。特に、ここで説明している処理の半分以上はソートに関するものですが、これはなくても別にかまいません(なければ保存した順にソートされます)。ですから、ソートにこだわらなければ、割と簡単に
Queryは作れます。
これでようやく、ひと通りの説明が終わりました! そんなわけで、
Query、クエリーの設定をする
QueryOptions、ソートの設定をする
SortOptions、ソートの内容を設定する
SortExpression、以上のクラスの作り方がわかって、ようやく検索を実行する準備が整いました!