2016-04-07 5 views
0

質問コンソールで以下のXqueryを試しましたが、データを検索する必要がありますコレクション賢明ですか?marklogic 8 - 賢明なコレクション検索方法

let $value1 := "antony" 
let $value2 := "cse" 
for $uri1 in cts:uris((),(), ( 
    cts:element-query(xs:QName("P"), 
     cts:and-query((
      cts:element-attribute-value-query(xs:QName("P"),xs:QName("name"),$value1), 
      cts:element-attribute-value-query(xs:QName("P"),xs:QName("value"),$value2) 
    )) 
    ) 
)) 
let $xml := doc($uri1) 
return $xml//PS/P [@name eq "volume"]/@value 

方法上記のXQueryでコレクションを追加するために私を提案してください?

答えて

3

最初に、URIではなくドキュメントを最終的に求めているので、cts:searchを直接使用する方が効果的です。あなたは、フィルタリングのコストを回避したい場合は、例えば「フィルタリングされていない」オプションを追加することができます。

let $value1 := "antony" 
let $value2 := "cse" 
return 
cts:search(doc(), 
    cts:element-query(xs:QName("P"), 
    cts:and-query((
     cts:element-attribute-value-query(xs:QName("P"),xs:QName("name"),$value1), 
     cts:element-attribute-value-query(xs:QName("P"),xs:QName("value"),$value2) 
    )) 
), "unfiltered" 
)//PS/P[@name eq "volume"]/@value 

か、あなただけのPS/P要素/気にするので:

cts:search(doc()//PS/P, 
    cts:element-query(xs:QName("P"), 
    cts:and-query((
     cts:element-attribute-value-query(xs:QName("P"),xs:QName("name"),"antony"), 
     cts:element-attribute-value-query(xs:QName("P"),xs:QName("value"),"cse") 
    )) 
), "unfiltered" 
)[@name eq "volume"]/@value 

を内を検索しますコレクションは、コレクション( "yourcollection")でdoc()を置き換えます。

cts:search(collection("yourcollection")//PS/P, 
    cts:element-query(xs:QName("P"), 
    cts:and-query((
     cts:element-attribute-value-query(xs:QName("P"),xs:QName("name"),"antony"), 
     cts:element-attribute-value-query(xs:QName("P"),xs:QName("value"),"cse") 
    )) 
), "unfiltered" 
)[@name eq "volume"]/@value 
+0

ありがとうございます@mholstege、そのうまく動作します。 – Antony

関連する問題