MarkLogic:如何使用cts:uri搜索XPath

MarkLogic:如何使用cts:uri搜索XPath,xpath,marklogic,cts-search,Xpath,Marklogic,Cts Search,是否可以使用cts:uris()搜索其文档包含特定XPath的uri?我认为这可能比从cts:search返回URI更快。以下是我目前的情况: declare function local:xpath-search($collection) { for $i in cts:search(//a/b, cts:and-query((cts:collection-query($collection)) ))[1] return fn:base-uri($i) } ; 使用cts:uris()

是否可以使用
cts:uris()
搜索其文档包含特定XPath的uri?我认为这可能比从
cts:search
返回URI更快。以下是我目前的情况:

declare function local:xpath-search($collection)  {
 for $i in cts:search(//a/b, cts:and-query((cts:collection-query($collection)) ))[1] return fn:base-uri($i) 
} ;
使用
cts:uris()
,是否有一种更快的方法返回包含与XPath
//a/b
匹配的文档?

您可以用来构造一个cts:query,其功能类似于XPath表达式
//a/b
搜索具有
a
元素且具有
b
元素后代的文档。它并不完全相同,可能会给您带来一些误报,因为它实际上更类似于
//a//b
,但可能是可以接受的,并且可以与
cts:uris()
一起使用


您可以消除FLWOR,只需使用:
cts:search(//a/b,cts:and-query((cts:collection query($collection)))/fn:base-uri()
如果您愿意创建路径范围索引,您可以用同样的方法来替换嵌套的cts:element查询,但需要这些路径索引会降低灵活性。。
xquery version "1.0-ml";

declare function local:xpath-search($collection)  {
  cts:uris("", (), 
    cts:and-query(( 
      cts:collection-query($collection),
      cts:element-query(xs:QName("a"), 
        cts:element-query(xs:QName("b"), cts:and-query(()) ) ) )) )
};