2

我正在为搜索编写 Rest Extension,这需要在 JSON 嵌套文档中搜索的参数。我可以通过编写自定义约束来做到这一点,然后使用这个自定义约束解析搜索文本并构建查询..

我们也可以对排序顺序做同样的事情吗?顺便说一句,我的意思是我根据传递的参数为搜索选项构建排序顺序。

我在其中一个示例中看到,其中执行以下操作

let $options :=
<search:options>
  <search:operator name="sort">
    <search:state name="relevance">
      <search:sort-order>
        <search:score/>
      </search:sort-order>
    </search:state>
    <search:state name="year">
      <search:sort-order direction="descending" type="xs:gYear"
            collation="">
        <search:attribute ns="" name="year"/>
        <search:element ns="http://marklogic.com/wikipedia"
          name="nominee"/>
      </search:sort-order>
      <search:sort-order>
        <search:score/>
      </search:sort-order>
    </search:state>
  </search:operator>
</search:options>
return
search:search("lange sort:year", $options)

但即使在这里,也有对哪些字段进行排序的硬编码。我想做一些类似自定义约束的事情,在运行时我确定排序顺序列..

这可能吗 ??

4

1 回答 1

5

好吧,你给出的例子,你提到它是硬编码的。在这种状态下,它只是 XML。您可以在此步骤之前使用编程逻辑来决定元素和排序顺序并相应地构建您的 XML。下面的小例子使标题元素的排序升序或降序。这个小例子应该可以帮助你理解你可以在更大范围内做什么。

let $sort-direction := "descending"

let $options :=
    <search:options>
      <search:operator name="sort">
        <search:state name="relevance">
          <search:sort-order>
            <search:score/>
          </search:sort-order>
        </search:state>
        <search:state name="year">
          <search:sort-order direction="{$sort-direction}" type="xs:gYear"
                collation="">
            <search:attribute ns="" name="year"/>
            <search:element ns="http://marklogic.com/wikipedia"
              name="nominee"/>
          </search:sort-order>
          <search:sort-order>
            <search:score/>
          </search:sort-order>
        </search:state>
      </search:operator>
    </search:options>
    return
    search:search("lange sort:year", $options)
于 2016-02-06T23:07:45.467 回答