marklogic - marklogic 客户端 api 与其他模块结合
问题描述
我们之前使用 XQuery 进行 MarkLogic 查询。我们希望用 Java 代替它,因为它使用更广泛。
在我遇到模块查询之前一切都很好。
import module namespace ent = "http://xxx.xx/model/entitlements" at "/Entitlements/entitlements.xqy";
在 Xquery 中,我们在下面使用。
let $final-query := ent:query($query, $cvUserId)
let $docs := cts:search(/, $final-query)
return $docs
ent:query(xx,xx) 在我们的 Linux 服务器中,我们无法获取源代码。作为名称方,此查询将在执行搜索时进行权利检查。
我在下面写了 Java 代码来得到结果。
QueryManager queryManager = markLogicClient.newQueryManager();
StringQueryDefinition queryDef = queryManager.newStringDefinition("OPTIONS");
queryDef.setCriteria("Title:test");
XMLDocumentManager dManager = markLogicClient.newXMLDocumentManager();
DocumentPage docs = dManager.search(queryDef, 1, new DOMHandle());
dManager.search(queryDef, 1);
它适用于我的测试,但没有权利检查。
有什么可以ent:query(xx,xx)
用 Java 应用我自己的查询吗?
Marklogic-8 & marklogic-client-api-4.0.4
解决方案
MarkLogic 中的 Java 和 XQuery API 没有可比性,它们填充不同的用例,实际上 Java API 最终调用 XQuery。
XQuery(和 JavaScript)在服务器内运行,Java API 在服务器外运行并调用 REST API,然后调用服务器中的 XQuery。如果您有非常好的 XQuery,那么用 Java重写它就没有什么意义了——充其量,性能会受到影响。相反,您可以从 Java API 调用 XQuery,既可以作为“ad hoc”表达式,也可以作为存储模块。这允许您为应用程序中受益于 Java API 但保留现有代码的部分公开 Java API。对于有意义的新代码,Java API 非常好,但是对于您发现它不能满足您的需求的情况,您可以应用与上述相同的技术并仍然为您的应用程序提供相同的集成.
您可以在此处查看使用 Java API 调用 ML 的各种方法的一些示例以及性能基准: https ://github.com/DALDEI/mlperf
推荐阅读
- variables - 使用concat()动态调用参数,选择元素名称
- spring-boot-admin - Spring Boot Admin:自定义标头身份验证
- mongodb - 如何修复“无法识别的表达式 $round”,同时使用 mongodb $and 条件和 $lookup 将其应用于管道中的存储数据
- sql-server - 将动态参数传递给 SQL
- php - WordPress REST API 创建自定义帖子类型不起作用
- javascript - 为什么在没有延迟的超时函数运行时会触发阻塞的指针事件?
- java - 从 Apache Http 客户端旧版迁移到 OkHttp
- json - 在 Scala play WS 中处理 JSON 响应
- react-native - 减少Highcharts条形图中条形的长度
- powershell - 引用同一 PSCustomObject 的另一个属性