帮助我理解“完全可搜索的路径表达”。不可搜索的路径表达式的示例是:
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?
“可搜索路径表达”的正式定义是什么?
答案 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")
)
)
)