【问题标题】:Marklogic cts:or query in LoopMarklogic cts:或在循环中查询
【发布时间】:2012-09-18 15:41:00
【问题描述】:

我想在 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')
    )
)

【问题讨论】:

    标签: xquery marklogic


    【解决方案1】:

    对于这个特殊的例子,最好写一个shotgun-OR:

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

    这将像或查询一样,但效率更高。请注意,我将您的 cts:element-query 更改为元素值查询。这可能是也可能不是您想要的,但每个查询词都应该尽可能精确。

    您还可以使用 FLWOR 表达式来生成查询。这对于 and-query 语义很有用,而以前的技术没有帮助。

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

    【讨论】:

      【解决方案2】:

      这将起作用:

      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-query 的序列。

      【讨论】:

        猜你喜欢
        • 2013-12-07
        • 1970-01-01
        • 2016-09-20
        • 2019-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多