XQuery到CTS查询转换

时间:2018-05-24 03:56:34

标签: marklogic marklogic-8 marklogic-9

您好我是MarkLogic的新手,在阅读ML文档时,我发现执行CTS查询的性能优于执行Plain 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"
    )

所以请帮助我找出是否可以形成CTS Query for Above XQuery。

1 个答案:

答案 0 :(得分:2)

如果您无法添加路径索引,但整个路径非常重要(因此您无法使用 a 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"
)
相关问题