繁体   English   中英

MarkLogic-XQuery-使用可变长度序列或映射的cts:element-range-query

[英]MarkLogic - XQuery - cts:element-range-query using variable length sequence or map

我收集了100,000条记录,其结构如下:

<record>
    <pk>1</pk>
    <id>1234</id>
</record>
<record>
    <pk>2</pk>
    <id>1234</id>
</record>
<record>
    <pk>3</pk>
    <id>5678</id>
</record>
<record>
    <pk>4</pk>
    <id>5678</id>
</record>

我在ID上设置了范围索引。

我想在XQuery中编写一个查询,该查询将允许我传递可变长度的序列或ID的映射,并检索出所有具有这些ID的记录。

它必须能够传递任意数量的ID。 同样,它需要利用范围索引(如快速)。

CTS搜索是您的朋友。 他们将使用您的索引。
CTS搜索有几种不同的选择。 我首先想到的是尝试这样的事情:

let $ids as xs:string* := (1, 2, 4, 5, 6, 33, 35.....89)
let $results as element(record)* := cts:search(/record,
    cts:element-value-query(xs:QName("id"), $ids, ("exact"))
    )
return $results
(: This will return all the record elements with their children :)

文档显示,您可以在cts:element-value-query中将序列指定为第二个参数,并且序列的性质就是可变长度。 当您的序列传递到该cts:element-value-query ,就好像在说“ ID == 3 OR ID == 9 OR ID == 13”,等等。

http://docs.marklogic.com/7.0/cts:element-value-query

您还可以使用元素范围查询: http : //docs.marklogic.com/7.0/cts :element-range-query,尽管我对它们的评价不高,所以在此方面我不能给您太多帮助。

请注意,在上面的代码中,我将id设置为xs:string 您当然可以将它们作为xs:integer ,但是以任何一种方式将它们传入参数时都将被解析为字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM