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

marklogic客户端api与其他模块结合,marklogic,marklogic-8,Marklogic,Marklogic 8,我们以前使用XQuery进行MarkLogic查询。我们想用Java来代替它,因为它的应用越来越广泛 在遇到模块查询之前,一切都很好 导入模块名称空间ent=”http://xxx.xx/model/entitlements“at”/应享权利/应享权利.xqy” 在Xquery中,我们使用下面的方法 let $final-query := ent:query($query, $cvUserId) let $docs := cts:search(/, $final-query) return $d

我们以前使用XQuery进行MarkLogic查询。我们想用Java来代替它,因为它的应用越来越广泛

在遇到模块查询之前,一切都很好

导入模块名称空间ent=”http://xxx.xx/model/entitlements“at”/应享权利/应享权利.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

Marklogic中的Java和XQuery api是不可比较的,它们填充了不同的用例,事实上Java api最终调用了XQuery

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


您可以在这里看到一些使用Java API调用ML的各种方法的示例以及性能基准:

MarkLogic中的Java和XQuery API是不可比较的,它们填充不同的用例,事实上Java API最终调用XQuery

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


您可以在这里看到一些使用Java API调用ML的各种方法的示例以及性能基准:

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

保留现有的XQuery代码,并使用简单的函数创建漂亮的RESTful Web服务把它都挂起来