当特定元素在 Marklogic 中多次出现时,仅搜索那些 XML
Search only those XMLs when a particular element occurs multiple times in Marklogic
我试图在 Marklogic 中搜索包含元素 <document>
不止一次的文档 XML。以下是我要检索的此类文档 XML 的结构:
<root>
<documents>
<document>
<id>1</id>
<name>roy</name>
<otherData></otherData>
</document>
<document>
<id>2</id>
<name>roy</name>
<otherData></otherData>
</document>
....
...
..
.
<document>
<id>3</id>
<name>roy</name>
<otherData></otherData>
</document>
</documents>
</root>
我不想检索具有以下结构的 XML:
<root>
<documents>
<document>
<id>3</id>
<name>roy</name>
<otherData></otherData>
</document>
</documents>
</root>
我可以使用 element-query
和 xs:QName("document")
搜索存在的或最小的一个,但不确定如何搜索多个。
如有任何帮助,我们将不胜感激。
没有真正简单的方法可以在 MarkLogic 中很好地扩展。最简单的方法是丰富文档,将计数属性添加到 <documents>
元素,并在您每次触摸文档时保持最新。然后你可以在 count 属性上做一个直接的范围索引,直接得到你想要的。
HTH!
我喜欢接受的答案,但尝试使用 cts:search 和 XPATH 来做不同的事情。它比仅使用 XPATH 更快:
xquery version "1.0-ml";
let $query1:= cts:element-query(xs:QName("document"),cts:and-query( () )),
$query2:= cts:element-query(xs:QName("documents"),$query1)
return
for $doc in cts:search(collection(),$query2,("unfiltered")) where count($doc/root/documents/document) > 1 return $doc
我试图在 Marklogic 中搜索包含元素 <document>
不止一次的文档 XML。以下是我要检索的此类文档 XML 的结构:
<root>
<documents>
<document>
<id>1</id>
<name>roy</name>
<otherData></otherData>
</document>
<document>
<id>2</id>
<name>roy</name>
<otherData></otherData>
</document>
....
...
..
.
<document>
<id>3</id>
<name>roy</name>
<otherData></otherData>
</document>
</documents>
</root>
我不想检索具有以下结构的 XML:
<root>
<documents>
<document>
<id>3</id>
<name>roy</name>
<otherData></otherData>
</document>
</documents>
</root>
我可以使用 element-query
和 xs:QName("document")
搜索存在的或最小的一个,但不确定如何搜索多个。
如有任何帮助,我们将不胜感激。
没有真正简单的方法可以在 MarkLogic 中很好地扩展。最简单的方法是丰富文档,将计数属性添加到 <documents>
元素,并在您每次触摸文档时保持最新。然后你可以在 count 属性上做一个直接的范围索引,直接得到你想要的。
HTH!
我喜欢接受的答案,但尝试使用 cts:search 和 XPATH 来做不同的事情。它比仅使用 XPATH 更快:
xquery version "1.0-ml";
let $query1:= cts:element-query(xs:QName("document"),cts:and-query( () )),
$query2:= cts:element-query(xs:QName("documents"),$query1)
return
for $doc in cts:search(collection(),$query2,("unfiltered")) where count($doc/root/documents/document) > 1 return $doc