我正在使用MarkLogic客户端API,并且想在XQuery中像cts:register
那样存储查询。
在XQuery代码中,我们正在使用以下代码:
let $query := "title:risk"
let $final-query :=
cts:register(cts:query(search:parse($query,
<options xmlns="http://marklogic.com/appservices/search">
.......
</options>)))
return cts:search(/, $final-query)
我知道这段代码将生成类似56933683224713984
的数字,我们可以从MarkLogic优化中获得一些好处。
但是,MarkLoigc客户端API无法提供类似于注册查询的API。
如何优化我的Java代码?我担心MarkLogic无法处理原始查询(未注册),并且性能可能不佳。
MarkLogic-8和client-api-4.04
答案 0 :(得分:1)
除了扩展之外,您还可以使用Java API中的AdHoc查询功能。 https://docs.marklogic.com/guide/java/resourceservices#id_47102
由于Java API最终“在幕后-通过REST API”调用了XQuery,因此使用即席调用提供了最佳的“透明度”和优化代码的能力,同时仍在使用Java API,但代价是类型安全性较低且略有降低更详细的代码。您可能对这组测试用例很感兴趣,这些测试用例列举了以不同的性能特征来做同一件事的多种方法。 YMMV。 https://github.com/DALDEI/mlperf
答案 1 :(得分:0)
请参见cts:register。它受支持,但是我看不到通过Java API做到这一点的任何方法,但是您可以使用extension并编写XQuery或JavaScript代码来注册查询。
如果您希望将其添加到Java API中,请在Java Client API's GitHub page上提出问题。