You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MarkLogic查询控制台运行RestAPI及zsearch模块优化咨询

方案专业点评

方案1:从日志提取请求复制到查询控制台运行

  • 实现方式:不需要局限于xdmp:http-post/xdmp.httpPost,可以直接调用zsearch模块的zsearch:get()函数,构造符合要求的$context和$params入参即可,比走HTTP调用少了网络开销,测试结果更精准。
  • 性能分析合理性:直接测试Rest调用本身是合理的,如果要测业务逻辑性能,建议跳过HTTP层直接调用函数,避免网络、负载均衡等外部因素干扰测试结果;如果要端到端测完整请求链路,用HTTP调用的方式更贴近真实场景。

方案2:硬编码添加return:plan和return:metrics选项

修改zsearch:get()函数里的$paramMap构造逻辑即可,示例如下:

let $paramMap  := map:new()
    =>zsearch:query-parameter($params,"q",false(),false(),(),(),())
    =>zsearch:query-parameter($params,"category",false(),true(),("content","metadata","collections","permissions","properties","quality","metadata-values"),(),())
    =>zsearch:query-parameter($params,"format",false(),false(),("json","xml"),(),())
    =>zsearch:query-parameter($params,"start",false(),false(),(),(),xs:unsignedLong#1)
    =>zsearch:query-parameter($params,"pageLength",false(),false(),(),(),xs:unsignedLong#1)
    =>zsearch:query-parameter($params,"options",false(),false(),(),(),())
    =>zsearch:query-parameter($params,"collection",false(),true(),(),(),())
    =>zsearch:query-parameter($params,"directory",false(),false(),(),(),())
    =>zsearch:query-parameter($params,"view",false(),true(),("none","results","metadata","facets","all"),(),())
    =>zsearch:query-parameter($params,"txid",false(),false(),(),(),())
    =>zsearch:query-parameter($params,"database",false(),false(),(),(),())
    =>zsearch:query-parameter($params,"forest-name",false(),true(),(),(),())
    =>zsearch:query-parameter($params,"transform",false(),false(),(),(),())
    =>zsearch:query-parameter($params,"timestamp",false(),false(),(),(),())
    =>zsearch:query-parameter($params,"trace",false(),true(),(),"http://marklogic.com/xdmp/privileges/rest-tracer",())
    (: 新增添加指标和执行计划的参数 :)
    =>map:with("view", map:get($paramMap, "view") => ("plan", "metrics"))
    =>map:with("return-plan", fn:true())
    =>map:with("return-metrics", fn:true())

search-model-query.xqy会自动识别上述参数返回执行计划和性能指标,不需要修改下游调用逻辑。


search-model-query.xqy相关问题解答

模块存放位置

该模块属于MarkLogic内置的REST API底层模块,存放在MarkLogic的Modules系统数据库中,你可以在查询控制台切换数据源到Modules数据库,直接查询路径/MarkLogic/rest-api/models/search-model-query.xqy查看源码。不建议直接修改内置模块添加日志,可以在zsearch:get()调用searchmodq:search-get()的前后添加xdmp:log()打印参数和执行时间即可。

search-model-query.xqy是MarkLogic REST API搜索端点的底层封装,内置了所有REST搜索参数的解析、权限校验、响应格式转换、分页逻辑、transform调用等能力,直接调用可以省去自己实现这些逻辑的成本,本身不会额外发起REST API调用,和直接调用search:search的性能差异极小,你认为效率低属于误解。


迁移到search:search的步骤
  1. 移除原有对searchmodq、sut、eput三个REST相关模块的导入
  2. 保留原有的参数解析逻辑,把$paramMap里的参数映射为search:search对应的入参:
    • q参数对应search:search的第一个$query入参
    • options参数对应第三个$options入参
    • start、pageLength对应第四、第五个入参
  3. 手动实现原有REST模块内置的逻辑:结构化查询解析、结果格式转换、权限校验、transform调用、响应头设置等
  4. 替换searchmodq:search-get()调用为search:search()调用,把返回结果传入原有的zsearch:compress()压缩逻辑即可

内容的提问来源于stack exchange,提问作者Tim Meagher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 04:18:03