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

时间:2018-08-09 09:12:45

标签: marklogic marklogic-8

我们以前使用XQuery进行MarkLogic查询。而且,我们希望将Java替换为更广泛使用的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);

对于我的测试来说效果很好,但是没有权利检查。

是否可以使用Java来应用我自己的查询ent:query(xx,xx)

Marklogic-8和marklogic-client-api-4.0.4

2 个答案:

答案 0 :(得分:2)

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

XQuery(和JavaScript)在服务器内运行,Java API在服务器外运行,并调用REST API,然后在服务器中调用XQuery。如果您拥有非常好的XQuery,那么使用Java进行 rewrite 几乎没有意义-最好的情况下,性能会受到影响。相反,您可以从Java API调用XQuery作为“临时”表达式或存储模块。这使您可以为应用程序的某些部分公开Java API,这些部分可以从Java API中受益,但保留现有代码。对于有意义的新代码,Java API相当不错,但是对于您发现无法满足要求的情况,您可以应用与上述相同的技术,并仍向应用程序提供相同的集成。

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

答案 1 :(得分:0)

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