Xquery Marklogic cts:或循环中的查询

Xquery Marklogic cts:或循环中的查询,xquery,marklogic,Xquery,Marklogic,我想在for循环中创建一个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-

我想在for循环中创建一个
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')
    )
)

对于这个特定示例,最好编写一个猎枪或:

cts:element-value-query(xs:QName("ts:tag"), xs:string(1 to 5))
这将类似于or查询,但效率会更高一些。注意,我将您的
cts:element查询
更改为元素值查询。这可能是您想要的,也可能不是您想要的,但是每个查询词都应该尽可能精确

还可以使用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]
这将有助于:

let $query := cts:or-query(
  for $val in ('1', '2', '3', '4', '5')
  return cts:element-query(xs:QName("ts:tag"), $val)
)
FLWOR循环返回cts:element查询的序列