marklogic 客户端 api 与其他模块结合

marklogic client api conbine with other module

我们之前使用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

Java 和 MarkLogic 中的 XQuery API 没有可比性,它们填充不同的用例,实际上 Java API 最终调用 XQuery。

XQuery(和 JavaScript)在服务器内运行,Java API 在服务器外运行并调用 REST API,然后在服务器中调用 XQuery .如果您的 XQuery 非常好,那么 重写 并使用 Java 就没有什么意义了——充其量,性能会受到影响。相反,您可以从 Java API 作为 'ad hoc' 表达式或存储模块调用 XQuery。这允许您为应用程序中受益于 java API 的部分公开 Java API,但保留现有代码。对于新代码,这样做是有意义的,Java API 非常好,但是对于您发现它不能满足您需要的情况,您可以应用与上述相同的技术,并且仍然为您的应用程序提供相同的集成。

您可以在此处查看使用 Java API 调用 ML 的各种方法的一些示例以及性能基准:https://github.com/DALDEI/mlperf

保留您现有的 XQuery 代码并创建漂亮的 RESTful Web 服务,使用简单的 XQRS 函数将其连接起来。