Marklogic客户端api是否支持cts:register像XQuery这样的查询?

时间:2018-09-03 03:06:19

标签: marklogic marklogic-8

我正在使用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

2 个答案:

答案 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上提出问题。