Marklogic cts:或在循环中查询

时间:2012-09-18 15:41:00

标签: xquery marklogic

我想在for循环中创建cts:or-query。我怎样才能做到这一点?

我的逻辑的一个例子:

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')
    )
)

1 个答案:

答案 0 :(得分: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]