Marklogic XQuery到CTS查询转换

Marklogic XQuery到CTS查询转换,marklogic,marklogic-8,marklogic-9,Marklogic,Marklogic 8,Marklogic 9,您好,我是MarkLogic新手,在阅读ML文档时,我发现执行CTS查询的性能比执行普通XQuery要好 要求:我需要将下面的XQuery转换为CTS Query,以执行XPath及其值的搜索,而且我不想为XPath创建路径范围索引,因为我正在动态获取XPath for $document in collection()[/tXML/Message/TEST/TEST1/TESTID="10"] return ( if(fn:not(fn:empty($document/

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

要求:我需要将下面的XQuery转换为CTS Query,以执行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"
    )

因此,请帮助我找出是否可以为上述XQuery形成CTS查询。

如果您不能添加路径索引,但整个路径很重要(因此您不能只使用
CTS:element-value查询(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")))))
根据,您需要启用“单词位置”和“元素单词位置”索引

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

 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"
)

您能否详细介绍一下动态获取XPath的
位?它是以字符串的形式传入的吗?注意代码注入..我有一个函数,它将xpath及其值作为参数,所以在本例中,我从用户处获取/tXML/Message/TEST/TEST1/TESTID=“10”,下次用户可以发送另一个xpath,所以我将其称为“动态获取xpath”,所以您需要一个解析xpath并生成等效cts查询的函数。用户是在传递任意xpath,还是像您的示例一样始终是一条直线元素路径?xpath的潜在复杂性将从根本上影响问题的难易程度。Thxs@BenW用于添加注释。。。现在我需要对上面的Xquery进行完全等效的CTS查询