MarkLogic:使用 xdmp:estimate 和编码标准
MarkLogic: Using xdmp:estimate and coding standards
我最初写了查询:
cts:search(fn:doc(),cts:element-range-query(xs:QName("ts:week"), ">=", xs:date("2009-05-01")),"unfiltered")
我修改为如下,看起来更美观:
let $range_query := cts:element-range-query(xs:QName("ts:week"), ">=", xs:date("2009-05-01"))
let $query := cts:search(fn:doc(), $range_query, "unfiltered")
return $query
我得到了与预期相同的结果。
现在,为了确认我的 "unfiltered" 方法,我 运行 fn:count 与 xdmp:estimate 检查。
xdmp:estimate(cts:search(fn:doc(),cts:element-range-query(xs:QName("ts:week"), ">=", xs:date("2009-05-01")))
上面的查询 运行 很好并且 return 得到了预期的结果。
但是,
let $range_query := cts:element-range-query(xs:QName("ts:week"), ">=", xs:date("2009-05-01"))
let $query := cts:search(fn:doc(), $range_query)
return xdmp:estimate($query)
给我一个错误:无法搜索表达式。
1) 我使用 let 和 return 的方法是在 MarkLogic 中编写代码的推荐方式吗?
2) 使用 let 和 return 方法无法搜索表达式的原因是什么?
xdmp:estimate
函数采用表达式进行计算。您不能传递变量。在你的例子中,第三行的 $query
是一个结果序列,你不能估计一个序列。
事实上,您的 $query
应该真正称为 $results
,因为它没有保存查询,而是保存搜索的执行结果。
把xdmp:estimate
想成是"Hey if I ran this expression how many results do the indexes think I'd get?"
我最初写了查询:
cts:search(fn:doc(),cts:element-range-query(xs:QName("ts:week"), ">=", xs:date("2009-05-01")),"unfiltered")
我修改为如下,看起来更美观:
let $range_query := cts:element-range-query(xs:QName("ts:week"), ">=", xs:date("2009-05-01"))
let $query := cts:search(fn:doc(), $range_query, "unfiltered")
return $query
我得到了与预期相同的结果。
现在,为了确认我的 "unfiltered" 方法,我 运行 fn:count 与 xdmp:estimate 检查。
xdmp:estimate(cts:search(fn:doc(),cts:element-range-query(xs:QName("ts:week"), ">=", xs:date("2009-05-01")))
上面的查询 运行 很好并且 return 得到了预期的结果。
但是,
let $range_query := cts:element-range-query(xs:QName("ts:week"), ">=", xs:date("2009-05-01"))
let $query := cts:search(fn:doc(), $range_query)
return xdmp:estimate($query)
给我一个错误:无法搜索表达式。
1) 我使用 let 和 return 的方法是在 MarkLogic 中编写代码的推荐方式吗?
2) 使用 let 和 return 方法无法搜索表达式的原因是什么?
xdmp:estimate
函数采用表达式进行计算。您不能传递变量。在你的例子中,第三行的 $query
是一个结果序列,你不能估计一个序列。
事实上,您的 $query
应该真正称为 $results
,因为它没有保存查询,而是保存搜索的执行结果。
把xdmp:estimate
想成是"Hey if I ran this expression how many results do the indexes think I'd get?"