我有以下 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 持久化这一事实引入了一层潜在的问题,以防这是强制性的,因为这些选项可能需要与每个旨在使用代码库的数据库实例同步。
因此,如果 Marklogic 开发人员正在倾听,我认为 Java 客户端 API 并不像我预期的那样成熟或文档化。
到目前为止,我有两个选择:
1) 我可以在字符串文件中硬编码我的 XCC 查询,并尝试使用参数占位符插入我需要的数据并通过 XCC 会话检索。或者。
2) 查看命名空间是否有任何 XSD 文件,http://marklogic.com/appservices/search
并从中创建静态 JAXB 对象,以便构建某种“标准”类,如 Hibernate或QueryDSL,遗憾的是,我必须说,它们已经支持某种级别的 MongoDB 查询。
伙计们,真的,将某种流畅的查询工具(如 QueryDSL)带到 Marklogic 并摆脱这个Rube Goldberg 查询机器。
更新 2:似乎这可以在 ML7 中解决。期待它。
谢谢!