MarkLogicのクエリコンソールでの開発


概要

MarkLogicのデータベースの作成が完了後、いよいよデータを挿入して検索する問合せ文の開発に入ります。ここではインストール時に作成されるクエリコンソールを利用してみましょう。宜しければ公式サイトも参照ください。

ロール・ユーザの作成

インストール時に作成した管理者ユーザを使ってもよいのですが、セキュリティ観点からクエリコンソールを使えるユーザを追加してみます。

まずは、ロールの作成です。管理者ユーザで管理者画面(ポート8001)に入り、画面左側の一覧から「Security」→「Roles」を順番に選択すると既存ロールの一覧が出ます。ここで「Create」タブを選択すると、ロールの新規作成画面になります。ロール名はqcroleとしました。下にスクロールして以下の項目にチェックします。

項目 設定値
roles qconsole-user
Execute Privileges any-uri

ここで一旦「ok」ボタンを押下します。ロール一覧画面となるので作成したロールを選択し、default permissionの欄までスクロールします。この欄にてqcroleに対してread/update/node-updateを選択して「ok」ボタンを押下します。

次にユーザの作成です。画面左側の一覧から「Security」→「Users」を順番に選択すると既存ユーザの一覧が出ます。ここで「Create」タブを選択すると、新規作成ユーザの作成画面になりますので、ユーザ名はqcuserとしました。

また下の方にスクロールして「roles」欄の中から「qcrole」にチェックを入れて「ok」ボタンを押下します。

クエリコンソールへのアクセス

クエリコンソール画面(ポート8000番)にブラウザからアクセスします。アカウントを求められるので、先程作成したユーザ・パスワードを入力します。するとクエリコンソール画面となります。

主な項目の説明です。

項目 説明
Database 問合せを行う対象のデータベースの選択。今回は作成したばかりのEnd_Databaseを選択する。
Exploreボタン データベース内のドキュメントのURI一覧が画面下側に表示される。URIを選択するとドキュメント内容が表示される。
Server 記述したクエリを受けとって処理するMarkLogic内のAPサーバ。
Query Type 記述するプログラミング言語の選択。
Runボタン 記入したクエリの試行開始を行う。
Resultタブ Resultタブを選択した状態で試行したクエリの戻り値を表示する。
Profileタブ Profileタブを選択した状態で試行したクエリ内の部分的な繰り返し数や処理時間を表示する。

クエリの実行

よくある「Hello World」をクエリコンソールで表示してみましょう。「Query Type」を「XQuery」に変更してクエリ記述欄に以下の通りに記述します。

xquery version "1.0-ml";
(: Hello Worldサンプル :)
let $a := "Hello World"
return $a

この状態で「Run」ボタンを押下すると、画面下部に結果が出ます。

クエリコンソールの注意点

簡単にクエリが試行できるのは便利ですが、以下の点に注意すべきだと思います。

  • 出力結果が大きいとブラウザが停止する。
    • 性能試験には使えない。この場合はクエリを修正して戻り値の確認を諦めるか、xdmp:save関数によるファイル出力などに変更する。
    • Profile実行でのクエリ分析に留める。
  • 複数の利用者がユーザアカウントを共有できない。
    • 複数人で開発を行う場合は、今回のようにロールを作成した上で、各人が個別のユーザを持つようにする。
  • APサーバ自体のcollation設定があるためデータベース設定やrange索引設定とズレがあると、クエリの実行結果が異なったり索引エラーとなる場合がある。
    • ひとまずcollationはデータベース・索引設定・APサーバで統一する。

挿入クエリの実行

以前に投稿した挿入クエリや検索クエリを実行してみます。詳細はこちらを参照ください。もしもエラーが起きた場合は、ユーザ・ロールの設定に漏れがないかを確認してください。
挿入クエリを記述して「Explore」ボタンを押した結果が以下です。無事に3ファイルを挿入することが出来ました。

検索クエリの実行結果は以下のようになりました。

こちらもうまくいったようです。

雑感

インストール後にすぐにクエリを体感できる点で、クエリコンソールはありがたい機能です。ただ、必要なユーザやロールの作成は少しややこしいかもしれません。今回はXQueryによって挿入や検索を行う前提で設定していますので参考になればと思います。