为什么像cts:search()/Xpath这样的表达式在Marklogic中是不可规划的?

为什么像cts:search()/Xpath这样的表达式在Marklogic中是不可规划的?,marklogic,Marklogic,使用xdmp:plan可以查看cts:search()和可搜索XPath的计划。但是为什么像cts:search()/Xpath这样的表达式是不可规划的呢? 另外,我会对cts:uri-match()。实际上,xdmp:plan/planable可以检查的唯一表达式是和XPath表达式 如果xdmp:plannable表示XPath表达式的特定cts:search不可规划,这是因为执行它会引发错误,或者因为cts:search的路径参数不是可搜索表达式 为什么路径表达式不可搜索?通常这意味着它从

使用xdmp:plan可以查看cts:search()和可搜索XPath的计划。但是为什么像
cts:search()/Xpath
这样的表达式是不可规划的呢? 另外,我会对
cts:uri-match()。实际上,xdmp:plan/planable可以检查的唯一表达式是和XPath表达式

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

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

看起来像普通函数,但实际上它们不是,因为它们不看参数的值,而是将参数视为表达式,只有某些表达式可以被这些函数检查。实际上,xdmp:plan/planable可以检查的唯一表达式是和XPath表达式

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

为什么路径表达式不可搜索?通常这意味着它从一个变量开始,而不是将整个数据库作为上下文
cts:search本身就是一种特殊的形式,因为它也不只是计算第一个参数,然后将查询应用到该集合(如果它计算了,它将是

在大型数据库上运行速度非常慢;如果需要这种功能,请使用)。相反,它检查路径表达式并将其合并到查询中。您将在计划中看到这一点。

如果您想要帮助优化某个特定表达式,请提出一个带有可测试版本的问题,也许有人能够提供帮助。我问这个问题是为了一般理解。我以后肯定会发布一些表达式。谢谢。如果你想帮助优化某个特定的表达式,可以问一个带有可测试版本的问题,也许有人能帮你。我问这个问题是为了一般理解。我以后肯定会发布一些表达式。谢谢,谢谢,这很有帮助。我的想法是,如果表达式不可规划,它就无法解析索引中的片段,因此效率低下。现在,
xdmp:plan(cts:urimatch(“regex”)
返回
xdmp-uncherchable
,尽管cts:urimatch使用uri词典(范围索引)。同样,尽管
cts:search(/root,cts:and query(())/child
似乎是“索引可解析的”,但在其上运行
xdmp:plan()
会返回
xdmp-uncherchable
。这让我想到
cts:search(/root,cts:and query(()))/child
效率不高。它很复杂:xdmp:plan没有您想象的那么通用。Per表达式必须是“部分可搜索的XPath表达式或cts:search()表达式”。现在
cts:search(/a,'fubar')
是一个cts:search表达式。但是
cts:search(/a,'fubar')/b
不是:它是一个带有cts:search子表达式的XPath表达式,显然不能部分搜索。调用
cts:urimatch
也不符合条件。未来的版本可能会改变这一点。即使在今天,
xdmp:query trace
仍然可以跟踪xdmp:plan无法跟踪的某些查找,反之亦然。Ok。那很有帮助。谢谢。谢谢,那很有帮助。我的想法是,如果表达式不可规划,它就无法解析索引中的片段,因此效率低下。现在,
xdmp:plan(cts:urimatch(“regex”)
返回
xdmp-uncherchable
,尽管cts:urimatch使用uri词典(范围索引)。同样,尽管
cts:search(/root,cts:and query(())/child
似乎是“索引可解析的”,但在其上运行
xdmp:plan()
会返回
xdmp-uncherchable
。这让我想到
cts:search(/root,cts:and query(()))/child
效率不高。它很复杂:xdmp:plan没有您想象的那么通用。Per表达式必须是“部分可搜索的XPath表达式或cts:search()表达式”。现在
cts:search(/a,'fubar')
是一个cts:search表达式。但是
cts:search(/a,'fubar')/b
不是:它是一个带有cts:search子表达式的XPath表达式,显然不能部分搜索。调用
cts:urimatch
也不符合条件。未来的版本可能会改变这一点。即使在今天,
xdmp:query trace
仍然可以跟踪xdmp:plan无法跟踪的某些查找,反之亦然。Ok。那很有帮助,谢谢。