查询近10天URI时触发XDMP-ELEMRIDXNOTFOUND错误求助
排查MarkLogic cts:uris查询中的XDMP-ELEMRIDXNOTFOUND错误
问题重现
你使用以下XQuery查询获取近10天的URI:
cts:uris((), (), cts:and-query(( cts:collection-query("http://nl.abnamro.com/cre/canonical"), cts:collection-query("http://nl.abnamro.com/cre/source/rapid"), cts:collection-query("latest"), cts:and-query(( cts:element-range-query(xs:QName("cre:ingestTime"), "<=", $selectedDate), cts:element-range-query(xs:QName("cre:ingestTime"), ">=", $chooseDate) )) )), (), functx:value-intersect(xdmp:host-forests(xdmp:host()), xdmp:database-forests(xdmp:database())) )
其中$selectedDate为3月17日(距今日10天),$chooseDate为今日3月27日。已确认元素索引存在,但运行时仍报错:
XDMP-ELEMRIDXNOTFOUND: cts:uris((), (), cts:and-query((cts:collection-query("http://nl.abnamro.com/cre/canonical"), cts:collection-query("http://nl.abnamro.com/cre/source/rapid"), cts:collection-query("latest"), ...), ()), (), (xs:unsignedLong("10633348138131917664"), xs:unsignedLong("11995695142322219087"))) -- No string element range index for {http://nl.abnamro.com/cre}ingestTime collation=http://marklogic.com/collation/
排查步骤
1. 核对索引配置与查询的匹配性
- 报错明确提示缺少string类型的元素范围索引,但
cre:ingestTime作为时间字段,应配置为date或datetime类型索引。检查数据库索引配置:- 确认索引的元素QName是
{http://nl.abnamro.com/cre}ingestTime,命名空间完全匹配; - 确认索引类型是
date/datetime,而非string; - 确认索引的排序规则(collation)与报错中的
http://marklogic.com/collation/一致。
- 确认索引的元素QName是
2. 确认查询的上下文数据库
- 运行脚本时,务必确保当前上下文是你创建了索引的目标数据库:
- 在Query Console中,左上角的数据库选择器要选对目标库;
- 如果通过
xdmp:invoke等方式执行,需显式指定database参数; - 你代码中使用的
xdmp:database()默认取当前上下文数据库,若上下文错误,会查询无索引的数据库,导致报错。
3. 验证索引是否实际生效
- 执行以下查询,输出当前数据库的所有范围索引,搜索
ingestTime相关条目,确认索引确实存在且配置正确:xdmp:describe(xdmp:database-range-indexes(xdmp:database()))
4. 修正日期参数的逻辑与类型
- 你的时间范围逻辑写反了:
<=3月17日且>=3月27日的范围是空集,应改为>=3月17日且<=3月27日; - 确保
$selectedDate和$chooseDate是xs:date或xs:datetime类型,而非字符串,比如:let $selectedDate := xs:date("2024-03-17") let $chooseDate := xs:date("2024-03-27")
5. 简化查询逐步排查
- 先移除森林过滤的部分,运行简化版查询,确认是否仍报错:
cts:uris((), (), cts:and-query(( cts:collection-query("http://nl.abnamro.com/cre/canonical"), cts:collection-query("http://nl.abnamro.com/cre/source/rapid"), cts:collection-query("latest"), cts:element-range-query(xs:QName("cre:ingestTime"), ">=", xs:date("2024-03-17")), cts:element-range-query(xs:QName("cre:ingestTime"), "<=", xs:date("2024-03-27")) )) )- 若简化版正常运行,再逐步添加森林过滤逻辑排查问题;
- 若仍报错,说明问题出在索引配置或上下文数据库,而非森林过滤。
内容的提问来源于stack exchange,提问作者user30743756
相关产品推荐
相关产品推荐

