如何确定范围索引是否存在?

时间:2014-07-09 08:06:40

标签: marklogic

使用XPath a/b/c,有没有办法找出元素c上是否有元素范围索引?

3 个答案:

答案 0 :(得分:2)

我也不确定我是否理解这个问题,但有几种方法可以确定是否存在范围索引。

您可以尝试使用https://docs.marklogic.com/cts:element-referencehttps://docs.marklogic.com/cts:path-reference构建范围索引引用。如果范围索引不存在,则引用构造函数将抛出错误,您可以测试该错误。例如:

try { cts:element-reference(xs:QName('DNE')) }
catch($ex) {
  if (not($ex/error:code = 'XDMP-ELEMRIDXNOTFOUND')) then xdmp:rethrow()
  else xdmp:log(text { 'No element range index on DNE!' }) }

另一种方法是使用admin API:https://docs.marklogic.com/admin:database-get-range-element-indexes及其相关功能。您可能期望这比元素引用上的try-catch更有效,但它可能会更慢。但是,管理API允许相当容易地测试任意数据库配置。

答案 1 :(得分:0)

这听起来像是一个“反向”XPath选择,XPath类似于reverse query。给定一组与特定节点匹配的路径?对于元素范围索引,它非常直接地匹配本地名称,名称空间和类型。与路径或字段匹配更复杂。

一个想法:路径匹配是否可以通过为每个路径设置一个xsl:template match="path"的动态XSLT样式表并转换节点的父文档来完成?有更简单的方法吗?

答案 2 :(得分:-1)

您问题的简单答案是:如果您没有配置元素范围索引,那么您就没有。您可以查看数据库配置,以查看是否创建了元素范围索引或以您关注的元素结尾的路径索引。

我怀疑你可能会问一个不同的问题,但我不确定它是什么。你为什么想知道?