MarkLogic Client 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);

它适用于我的测试,但没有权利检查。

有没有用 Java 应用我自己的查询ent:query(xx,xx)

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作为"临时"表达式或存储模块。 这允许您为受益于 java API 但保留现有代码的应用部分公开 Java API。 对于有意义的新代码,Java API 非常好,但对于您发现它不能满足您的需求的情况,您可以应用与上述相同的技术,并且仍然为您的应用程序提供相同的集成。

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

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

最新更新