【问题标题】:XQuery to CTS Query ConversionXQuery 到 CTS 查询的转换
【发布时间】:2018-11-03 04:07:29
【问题描述】:

您好,我是 MarkLogic 的新手,在阅读 ML 文档时,我发现执行 CTS 查询的性能优于执行普通 XQuery。

要求:我需要将以下 XQuery 转换为 CTS 查询以执行 XPath 及其值的搜索,而且我不想为 XPath 创建路径范围索引,因为我正在动态获取 Xpath。

for $document in collection()[/tXML/Message/TEST/TEST1/TESTID="10"]
return
    (
        if(fn:not(fn:empty($document/tXML/Message/TEST/TESTID))) then $document/tXML/Message/TEST/TESTID else "NULL",
        if(fn:not(fn:empty($document/tXML/Message/TEST/TESTType))) then $document/tXML/Message/TEST/TESTType else "NULL",
        if(fn:not(fn:empty($document/tXML/Message/TEST/TESTStatus))) then $document/tXML/Message/TEST/TESTStatus else "NULL"
    )

所以请帮我看看是否可以为 Above XQuery 形成 CTS 查询。

【问题讨论】:

  • 您能详细说明一下getting XPath Dynamically 位吗?它是作为字符串传递的吗?小心代码注入..
  • 我有一个函数,它将 xpath 及其值作为参数,所以这种情况下我从用户那里得到 /tXML/Message/TEST/TEST1/TESTID="10" 并且下次用户可以发送另一个 xpath所以我将其称为“动态获取 XPath
  • 所以你需要一个解析 xpath 并生成等效 cts 查询的函数。用户是传入任意 xpath,还是像您的示例一样始终是直元素路径? xpath 的潜在复杂性将从根本上影响您遇到的问题的难度。
  • 感谢 @BenW 添加评论...现在我需要与上述 Xquery 完全相同的 CTS 查询

标签: marklogic marklogic-8 marklogic-9


【解决方案1】:

如果你不能添加路径索引,但整个路径很重要(所以你不能只使用 just 一个cts:element-value-query(xs:QName('TESTID'), "10")),那么你可以使用这样的元素查询堆栈

let $query := 
    cts:element-query(xs:QName('tXML'),
        cts:element-query(xs:QName('Message'),
            cts:element-query(xs:QName('TEST'),
                cts:element-query(xs:QName('TEST1'),
                    cts:element-value-query(xs:QName('TESTID'), "10")))))

根据element-query docs,您需要启用“单词位置”和“元素单词位置”索引。

处理搜索结果没有什么不同。

 for $document in cts:search(collection(), $query)
 return (
    if(fn:not(fn:empty($document/tXML/Message/TEST/TESTID))) then $document/tXML/Message/TEST/TESTID else "NULL",
    if(fn:not(fn:empty($document/tXML/Message/TEST/TESTType))) then $document/tXML/Message/TEST/TESTType else "NULL",
    if(fn:not(fn:empty($document/tXML/Message/TEST/TESTStatus))) then $document/tXML/Message/TEST/TESTStatus else "NULL"
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 2016-09-20
    • 2016-04-10
    相关资源
    最近更新 更多