xquery返回每个节点的计数..我宁愿将这些作为循环的总计数

时间:2019-01-23 17:48:13

标签: xquery marklogic-corb

我试图在xquery中返回关键字的计数,但是它正在发送corb作业中每个节点的计数。有人可以帮忙

以下是我在corb作业上使用的查询

URIS模块

let $d1 := xs:date("2019-01-10")
let $t1 := xs:time("17:15:00")
let $d2 := xs:date("2019-01-16")
let $t2 := xs:time("22:39:00")
let $uris:= cts:uris((),(),
  cts:and-query((
    cts:element-range-query(xs:QName("meta:source"), "=", "CIRRUS", $CODEPOINT),
    cts:element-range-query(xs:QName("meta:modifiedDateTime"), ">=", 
    fn:dateTime($d1, $t1)),
    cts:element-range-query(xs:QName("meta:modifiedDateTime"), "<=", fn:dateTime($d2, $t2))
  ))
)
return (fn:count($uris), $uris)`

过程模块

declare variable $URI as xs:string external;
let $URI := xdmp:estimate(cts:search(fn:doc(), cts:word-query("Cirrus")))
return $URI`

1 个答案:

答案 0 :(得分:1)

按从URIs模块返回的顺序为每个URI调用处理模块。每次调用流程模块时,都会为该执行设置$URI变量的值。

处理模块未在执行过程中使用$URI变量。它正在执行相同的静态估计查询,将该值分配给名为$ URI的类似名称的变量,然后为每次执行返回相同的结果。

如果要计算每个文档中单词的出现次数,则应使用$URI来加载文档:fn:doc($URI),然后计算有多少meta:source个元素字。

处理模块使用的是“ Cirrus”,但URIs查询正在搜索“ CIRRUS”,但不清楚$ COLLATION是什么。假设您需要不区分大小写的评估,则只需lower-case()值并测试与“ cirrus”的相等性即可。

declare namespace meta = "whatever your namespace is"
declare variable $URI as xs:string external;
count(fn:doc($URI)//meta:source[lower-case(.) = "cirrus"])