次の Marklogic クエリをクエリ コンソールで実行すると、管理者権限を持つシステム ユーザーを取得できます。
xquery version "1.0-ml";
import schema namespace bfa="http://bitfood.org/auth" at "schema/auth/bitfood-auth.xsd";
cts:search(/bfa:AppUser[bfa:appAccess/@appRole = "ROLE_SYS_ADMIN"], cts:and-query(()))
無知で申し訳ありませんが、Java クライアント API のみを使用してこのクエリを実装することは可能ですか?
XCC 経由で生のクエリを使用できることはわかっていますが、可能な限りそれを回避しようとしています。
残念ながら、他の検索方法を簡単に扱っているJavaクライアントAPIのドキュメントを掘り下げてきましたが、これが可能であることを示唆するものは何も見つかりませんでした.
更新 1:皆さん、私はここでショーストッパーに当たったと思います。
この質問によると、Java クライアント API のクエリ オプション構築機能は非推奨としてマークされています。
@ehennum は、XML または JSON クエリ オプションを使用する代替案を提案しています。ただし、このようなクエリ オプションの指定は、基本的にコード内で生の文字列として定義されています。
String xmlOptions =
"<search:options "+
"xmlns:search='http://marklogic.com/appservices/search'>"+
"<search:constraint name='industry'>"+
"<search:value>"+
"<search:element name='industry' ns=''/>"+
"</search:value>"+
"</search:constraint>"+
"</search:options>";
確かに、JAXB、JDOM、ファイル、またはその他のツールを使用して XML を作成できますが、私の個人的な意見では、コード内のリソース ファイルにクエリを格納することに依拠しています。これ自体は悪いことではありませんが、慎重に検討すると、コード メンテナンスの悪夢につながる可能性があります。
さらに、サーバーで REST を介してこれらのオプションを永続化する必要があるという事実は、コード ベースで動作することを意図したすべてのデータベース インスタンスとオプションを同期する必要がある可能性があるため、これが必須である場合の潜在的な問題のレイヤーをもう 1 つ導入します。
そのため、Marklogic の開発者が耳を傾けているのであれば、Java クライアント API は、私が期待していたほど成熟しておらず、文書化されていないと思います。
これまでのところ、2 つのオプションがあります。
1) XCC クエリを文字列ファイルにハードコードし、パラメーター プレースホルダーを使用して、必要なデータを挿入し、XCC セッション経由で取得することができます。または。
2) 名前空間用の XSD ファイルがあるかどうかを確認し、それらから静的 JAXB オブジェクトを作成して、 HibernateまたはQueryDSLhttp://marklogic.com/appservices/search
のようなある種の「基準」クラスを作成します。悲しいことに、MongoDB クエリのいくつかのレベルを既にサポートしていると言わざるを得ません。
みんな、本当に、QueryDSL のようなある種の流暢なクエリ機能を Marklogic に持ち込み、このRube Goldberg クエリ マシンを取り除きます。
更新 2:これは ML7 で対処される可能性があるようです。楽しみにしています。
ありがとう!