MarkLogic:XDMP-UNSEARCHABLE错误或可搜索路径表达式

时间:2017-11-17 20:42:50

标签: xpath marklogic

帮助我理解“完全可搜索的路径表达”。不可搜索的路径表达式的示例是:

xquery version "1.0-ml";
(:constructed sequence :)
cts:search((<last_name>Mortensen</last_name>,<last_name>Hurt</last_name>,<last_name>Bello</last_name>),cts:word-query("Bello"))

使用$ doc / movies // country等变量的XPATH表达式(在“Xquery”Priscilla Walmsley书中称为“动态路径”)

XPATH表达式使用的XPath轴与child ::或descendant ::不同,例如:

cts:search(doc("doc/movies")/descendant::year[. = '1995']/parent::movie ,cts:word-query("Tom Stall"))

或 参见示例MarkLogic: Understanding searchable and unsearchable queries?

“可搜索路径表达”的正式定义是什么?

2 个答案:

答案 0 :(得分:1)

cts:search有一些特别之处。您需要了解在调用cts:search之前不评估第一个参数。相反,表达式本身会传递给数据层,然后数据层会尝试主要使用索引来解析表达式。

这就是为什么你不能提供构造的节点,也不能提供包含数据层未知的变量的XPath表达式。所以,这就是它提到(un)searchable expressions的原因。 performance guide(也由David Ennis引用)如下所示:

  

可完全搜索的XPath表达式是可以使用索引有效解析的表达式。

为了让自己的生活更轻松,尽量使用collection()作为第一个参数,并通过查询参数提供任何其他约束。

如果您需要过滤构造的节点或其他表达式的结果,请考虑使用cts:contains

HTH!

答案 1 :(得分:0)

可搜索路径表达式的明确示例是在方便命名的部分'Fully Searchable Paths and cts:search Operations'下定义的。

查看您的代码,我建议您阅读Search Developer's Guide。为方便起见,这里是cts:search section的深层链接。

此外,您提到xQuery并参考书籍或其他文献。有许多版本的xQuery - 目前的W3C推荐版本为3.1。您可能希望查看description of MarkLogic's implementation,因为它最初源自1.0方言,并且多年来一直在增强。

编辑: 此后,用户要求提供更多指导  通过评论。以下是基于原始代码示例的一个(众多)可能的解决方案:

xquery version "1.0-ml";
(:constructed sequence :)
let $last-name := ('Mortensen','Hurt','Bello')
return cts:search(fn:collection(),cts:and-query(
            (
              cts:element-word-query(xs:QName('last-name'),  $last-name),
              cts:word-query("Bello")
            )
          )
         )