MarkLogic:XDMP-UNSEARCHABLE 错误或可搜索路径表达式
MarkLogic: XDMP-UNSEARCHABLE error or searchable path expression
帮助我理解"fully searchable path expression"。无法搜索的路径表达式示例如下:
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 书中称为 "dynamic path")
或
使用不同于 child:: 或 descendant:: 的 XPath 轴的 XPATH 表达式,例如:
cts:search(doc("doc/movies")/descendant::year[. = '1995']/parent::movie ,cts:word-query("Tom Stall"))
或
参见示例 MarkLogic: Understanding searchable and unsearchable queries?
"searchable path expression" 的正式定义是什么?
可搜索路径表达式含义的明确示例在方便命名的部分下定义 'Fully Searchable Paths and cts:search Operations'..
查看您的代码,我建议您通读 Search Developer's Guide. For convenience, here is the deep link to the cts:search section。
此外,您提到了 xQuery 并参考了一本书或其他文献。 xQuery 有很多版本——当前的 W3C 推荐版本是 version3.1。您可能想看看 MarkLogic 的 描述
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")
)
)
)
cts:search
有一些特别之处。您需要了解在调用 cts:search
之前不会评估第一个参数。相反,表达式本身被传递到数据层,然后数据层尝试主要使用索引来解析表达式。
这就是为什么您不能提供构造的节点,也不能提供包含数据层未知的变量的 XPath 表达式。所以,这就是它说 (un)searchable expressions
的原因。 performance guide(也被 David Ennis 引用)是这样说的:
A fully searchable XPath expression is one that can be efficiently resolved using the indexes.
为了让您的生活更轻松,请尝试尽可能使用 collection()
作为第一个参数,并通过查询参数提供任何其他约束。
如果您需要过滤构造的节点,或另一个表达式的结果,请考虑使用 cts:contains
。
HTH!
帮助我理解"fully searchable path expression"。无法搜索的路径表达式示例如下:
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 书中称为 "dynamic path")
或
使用不同于 child:: 或 descendant:: 的 XPath 轴的 XPATH 表达式,例如:
cts:search(doc("doc/movies")/descendant::year[. = '1995']/parent::movie ,cts:word-query("Tom Stall"))
或 参见示例 MarkLogic: Understanding searchable and unsearchable queries?
"searchable path expression" 的正式定义是什么?
可搜索路径表达式含义的明确示例在方便命名的部分下定义 'Fully Searchable Paths and cts:search Operations'..
查看您的代码,我建议您通读 Search Developer's Guide. For convenience, here is the deep link to the cts:search section。
此外,您提到了 xQuery 并参考了一本书或其他文献。 xQuery 有很多版本——当前的 W3C 推荐版本是 version3.1。您可能想看看 MarkLogic 的 描述 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")
)
)
)
cts:search
有一些特别之处。您需要了解在调用 cts:search
之前不会评估第一个参数。相反,表达式本身被传递到数据层,然后数据层尝试主要使用索引来解析表达式。
这就是为什么您不能提供构造的节点,也不能提供包含数据层未知的变量的 XPath 表达式。所以,这就是它说 (un)searchable expressions
的原因。 performance guide(也被 David Ennis 引用)是这样说的:
A fully searchable XPath expression is one that can be efficiently resolved using the indexes.
为了让您的生活更轻松,请尝试尽可能使用 collection()
作为第一个参数,并通过查询参数提供任何其他约束。
如果您需要过滤构造的节点,或另一个表达式的结果,请考虑使用 cts:contains
。
HTH!