【问题标题】:Why are expressions like cts:search()/Xpath not plannable in Marklogic?为什么像 cts:search()/Xpath 这样的表达式在 Marklogic 中不可规划?
【发布时间】:2014-08-25 11:14:40
【问题描述】:

使用 xdmp:plan 可以查看 cts:search() 和可搜索 Xpath 的计划。但是为什么 cts:search()/Xpath 这样的表达式是不可计划的? 另外,我会为cts:uri-match() 提出同样的问题。

【问题讨论】:

  • 如果您需要帮助优化特定表达式,请使用可测试版本提出问题,有人可能会提供帮助。
  • 我问这个问题是为了一般理解。我以后肯定会发布一些表达。谢谢。

标签: marklogic


【解决方案1】:

xdmp:planxdmp:plannable 看起来像普通函数,但它们不是真正的函数,因为它们不查看参数的值,它们将它们视为表达式,并且只有某些表达式可以被它们检查职能。事实上,xdmp:plan/plannable 可以检查的唯一表达式是cts:search 和XPath 表达式。

如果xdmp:plannable 说XPath 表达式的特定cts:search 是不可规划的,那是因为执行它会引发错误,或者因为cts:search 的路径参数不是可搜索的表达式。

为什么路径表达式不可搜索?通常这意味着它从一个变量开始,而不是将整个数据库作为上下文。 cts:search 本身就是一种特殊形式,因为它也不只是评估第一个参数,然后将查询应用于该集合(如果这样做,它将是 在大型数据库上非常慢;如果您想要这种功能,请使用cts:contains)。相反,它检查路径表达式并将其合并到查询中。您将在计划中看到这一点。

【讨论】:

  • 谢谢,这很有帮助。我的想法是,如果表达式不可规划,它就无法从索引中解析片段,因此效率低下。现在,尽管 cts:uri-match 使用 uri lexicon(range索引)。同样,虽然 cts:search(/root,cts:and-query(()))/child 似乎是“索引可解析”,但运行 xdmp:plan()它返回 XDMP-UNSEARCHABLE 。它让我觉得 cts:search(/root,cts:and-query(()))/child 效率不高。
  • 这很复杂:xdmp:plan 并不像您想象的那样通用。根据docs.marklogic.com/xdmp:plan,表达式必须是“部分可搜索的 XPath 表达式或 cts:search() 表达式。”。现在cts:search(/a, 'fubar') 是一个 cts:search 表达式。但cts:search(/a, 'fubar')/b 不是:它是一个带有 cts:search 子表达式的 XPath 表达式,显然它不是部分可搜索的。致电cts:uri-match 也不符合条件。未来的版本可能会改变这一点。即使在今天,xdmp:query-trace 也可以跟踪一些 xdmp:plan 不能的查找 - 反之亦然。
  • 好的。这很有帮助。谢谢。
猜你喜欢
  • 2013-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-29
  • 1970-01-01
  • 1970-01-01
  • 2013-05-06
相关资源
最近更新 更多