MarkLogic Search API - 如何在与searchable-expression相同的元素上进行排序

时间:2013-07-24 22:02:02

标签: xquery marklogic

我正在尝试搜索特定元素,因此我在我的选项中有一个可搜索表达式。我还想按这个元素的值排序,所以我在value元素上创建了一个元素范围索引。以下是我的搜索选项,希望能让事情变得清晰:

 <options xmlns="http://marklogic.com/appservices/search">
        <term>
            <term-option>case-insensitive</term-option>
        </term>
        <debug>true</debug>
        <searchable-expression>/summary/name/value</searchable-expression>
        <sort-order type="xs:string" direction="ascending">
          <element ns="" name="value"/>
          <annotation>options for search institutions by name</annotation>
        </sort-order>
</options>

问题是当它进行排序时它会添加另一个值节点(取自搜索:report id =“SEARCH-FLWOR”)

...order by xs:string(($result//value)[1]) ascending return $result)[1 to 50]

而不是:

...order by xs:string(($result)[1]) ascending return $result)[1 to 50]

如何阻止它这样做?我无法更改可搜索的表达式,因为“name”元素具有另一个我不想搜索的子元素。我也不能将sort-order元素名称留空或将其设置为当前节点。看起来这很简单,但我还没有找到任何工作。

非常感谢帮助。

1 个答案:

答案 0 :(得分:4)

您可以使用<name>作为可搜索表达式的目标元素,但然后通过添加<value>来限制查询仅查看<additional-query>内部:

<options xmlns="http://marklogic.com/appservices/search">
        <term>
            <term-option>case-insensitive</term-option>
        </term>
        <debug>true</debug>
        <searchable-expression>/summary/name</searchable-expression>
        <additional-query>
          <cts:element-query xmlns:cts="http://marklogic.com/cts">
            <cts:element>value</cts:element>
            <cts:and-query/>
          </cts:element-query>
        </additional-query>
        <sort-order type="xs:string" direction="ascending">
          <element ns="" name="value"/>
          <annotation>options for search institutions by name</annotation>
        </sort-order>
</options>