0

我想比较两个查询:

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)

我有以下问题:

  1. 在我得到的两个查询的结果中:Expression is unsearchable。这是一件好事吗?这是否意味着索引已被使用并且无法进行进一步的索引?

  2. (为流派启用范围索引)我猜 fn:distict+Xpath 使用范围索引,但由于 Xpath 而涉及过滤。OTOH 搜索:搜索仅使用值词典,所以它是否进行未过滤的搜索?如果没有,有没有办法以未经过滤的方式找到不同的值?

4

1 回答 1

4

xdmp:plan 不采用任意表达式作为其操作数:它看起来像一个函数,但实际上不是。(如果你想一想,肯定是这样,因为如果它是一个函数,它会首先评估它的参数,所以它没有创建计划的基础。)它不是为了让你比较两个一般的XQuery 表达式,但涉及搜索或路径的索引操作。

您只能给它一个 XPath 或一个 cts:search 表达式。

所以:xdmp:plan(ts:top-song/ts:genres/ts:genre/text())

因为search:search您可以使用一个选项来启用它 ( return-plan)

于 2017-07-21T15:35:53.750 回答