2012-09-18 69 views
2

我想在for循環中創建cts:or-query。我怎樣才能做到這一點?Marklogic cts:或循環中的查詢

我的邏輯的一個例子:

let $query := for $tag in (1,2,3,4,5) 
return myquery 

我想獲得最終的查詢,如:

let $query := cts:or-query(
    (
    cts:element-query(xs:QName("ts:tag"),'1'), 
    cts:element-query(xs:QName("ts:tag"),'2'), 
    cts:element-query(xs:QName("ts:tag"),'3'), 
    cts:element-query(xs:QName("ts:tag"),'4'), 
    cts:element-query(xs:QName("ts:tag"),'5') 
    ) 
) 

回答

6

對於這個特殊的例子那就更好地寫出了獵槍-OR:

cts:element-value-query(xs:QName("ts:tag"), xs:string(1 to 5)) 

這將表現得像一個or-query,但會更有效一些。請注意,我將cts:element-query更改爲元素值查詢。這可能是也可能不是你想要的,但每個查詢詞應儘可能精確。

您還可以使用FLWOR表達式來生成查詢。這對於前面的技術沒有幫助的查詢語義很有用。

let $query := cts:and-query(
    for $i in ('dog', 'cat', 'rat') 
    return cts:word-query($i)) 
return cts:search(collection(), $query)[1 to 20] 
0

這將工作:

let $query := cts:or-query(
    for $val in ('1', '2', '3', '4', '5') 
    return cts:element-query(xs:QName("ts:tag"), $val) 
) 

的FLWOR環路返回CTS的序列:元素查詢的。