2016-07-04 84 views
2

是否可以使用cts:uris()來搜索其文檔包含特定XPath的uri?我認爲它可能比從cts:search返回uris更快。以下是我目前有:MarkLogic:如何使用cts搜索XPath:uris

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) 
} ; 

是否有返回包含匹配到的XPath //a/b文件更快的方法,使用cts:uris()

+0

你可以消除FLWOR,只需使用:'CTS:搜索(// A/B,CTS:和查詢((CTS:收集查詢($集合))))/ FN:鹼基uri()' –

回答

1

您可以使用cts:element-query()構建CTS:查詢功能類似於XPath表達式//a/b尋找有有b元素子孫a元素的文檔。它不完全一樣,並可能會給你一些誤報,因爲它更類似於//a//b,但可能是可以接受的,可以與cts:uris()一起使用。

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(())))))) 
}; 
+0

如果你願意創建一個路徑範圍索引,你可以用相同的方式替換嵌套的cts:element-queries,但是需要這些路徑索引使得這種方法不那麼靈活。 – grtjn