我想比较两个查询:
1(
xdmp:plan(fn:distinct-values(/ts:top-song/ts:genres/ts:genre/text(), "http://marklogic.com/collation/en/S1/AS/T00BB"))
2(
declare variable $options :=
<options xmlns="http://marklogic.com/appservices/search">
<constraint name="genre">
<range type="xs:string" collation="http://marklogic.com/collation/en/S1/AS/T00BB">
<element ns="http://marklogic.com/MLU/top-songs" name="genre"/>
</range>
</constraint>
</options>;
xdmp:plan(search:search("", $options)/search:facet/search:facet-value)
我有以下问题:
在我得到的两个查询的结果中:表达式不可搜索。这是好事吗?这是否意味着索引已被使用,无法进行进一步的索引?
(范围索引为流派启用(我猜 fn:distict+Xpath 使用范围索引,但由于 Xpath 而涉及过滤。OTOH搜索:搜索仅使用值词典,那么它是否进行未经过滤的搜索? 如果没有,有没有办法以未过滤的方式找到不同的值?
> xdmp:plan 不采用任意表达式作为其操作数:它看起来像一个函数,但实际上不是。 (如果你考虑一下,一定是这样,因为如果它是一个函数,它会首先评估它的参数,所以它没有创建计划的基础。它不是为了比较两个常规的 XQuery 表达式,而是比较搜索或路径中涉及的索引操作。
您只能为其提供 XPath 或 cts:search 表达式。
所以:xdmp:plan(ts:top-song/ts:genres/ts:genre/text())
对于search:search
,您可以使用一个选项来启用它(return-plan
(