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

MarkLogic中如何快速将SPARQL查询的Solution转为Sequence?

问题描述

在QConsole中执行以下SPARQL查询,正常返回包含2346条数据的solution,耗时仅5 ms:

xquery version "1.0-ml";
import module namespace sem = "http://marklogic.com/semantics" at "/MarkLogic/semantics.xqy";

let $distinct-ids := '
  SELECT DISTINCT ?itemId 
  WHERE {
    ?itemId <hasListName> ?listName .
    FILTER (lcase(str(?listName)) = "test")
  }
'

return sem:sparql($distinct-ids)

需求是将结果转换为sequence而非solution以便后续处理。尝试用return map:get(sem:sparql($distinct-ids), "itemId")实现功能,虽能正常工作但耗时长达90 ms。请问有没有不使用map:get的更快方法?

优化方案

可以通过给sem:sparql()函数传入额外参数,让查询直接返回值序列,避免后续映射遍历的开销:

xquery version "1.0-ml";
import module namespace sem = "http://marklogic.com/semantics" at "/MarkLogic/semantics.xqy";

let $distinct-ids := '
  SELECT DISTINCT ?itemId 
  WHERE {
    ?itemId <hasListName> ?listName .
    FILTER (lcase(str(?listName)) = "test")
  }
'

return sem:sparql($distinct-ids, ("format", "values"))

这个方法直接让SPARQL查询返回itemId的原生序列,不需要再通过map:get逐个提取,性能会和原查询接近,避免了额外的耗时开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 05:08:25