Marklogic开箱即用的API转换查询

时间:2017-01-20 19:08:37

标签: marklogic marklogic-8

我正在使用开箱即用的ML REST API POST v1/search,我使用transform?参数来转换生成的结果。但我也想操纵发送到端点的字符串q。是否有类似transform-query或类似的东西将被调用以转换查询字符串。我知道我们可以编写一个自定义端点来执行此操作,但我想避免如果这可以在开箱即用的端点完成。

4 个答案:

答案 0 :(得分:2)

虽然在/ v1 / search中不支持,但我认为这在中间层是合理的做法 - 例如REST API之上的Java或NodeJS层。

答案 1 :(得分:1)

你是对的。目前,不支持对查询输入进行转换以执行查询扩展和其他查询操作。

资源服务扩展将是当前推荐的方法,使用修改后的查询调用cts:parse()/ cts:search()/ search:resolve()或search:search()。

希望有帮助,

答案 2 :(得分:1)

如果你想要做的是通过添加搜索条件(而不是修改字符串查询)来表达,你可以使用/ v1 / search的组合查询将原始字符串查询与表达附加标准。

http://docs.marklogic.com/guide/rest-dev/search#id_69918

答案 3 :(得分:0)

我所做的是写了一个处理转换查询的自定义Web服务,但我也喜欢开箱即用的api所做的所有参数,所以我复制了开箱即用的xquery代码。以下是我的所作所为。就我而言,我只是在进行查询扩展

let $search:= map:get($params,"q")
let $qexpand := repo-searchLib:queryExpand($search)
let $_ := map:put($params, "q", $qexpand)
let $headers   := eput:get-request-headers()
let $env       := eput:response-callback-map(eput:response-type-callback#1)
let $response := searchmodq:search-post($headers,$params, $env, xdmp:get-request-body(eput:get-content-format($headers,$params)))
let $has-matches := map:get($env, "has-matches")
return
    if (exists($response)) then $response
    else if ($has-matches) then ()
    else xdmp:set-response-code(404,"Not Found")

你们中有人认为可能会遗漏某些东西吗?目前这似乎对我有用。