Marklogic Xquery搜索选项中的自定义排序顺序

Marklogic Xquery搜索选项中的自定义排序顺序,marklogic,marklogic-8,Marklogic,Marklogic 8,我正在为搜索编写Rest扩展,这将在JSON嵌套文档中的何处搜索参数。我可以通过编写一个自定义约束来实现这一点,然后使用这个自定义约束解析搜索文本并构建查询 我们可以对分拣顺序也做同样的操作吗?顺便说一下,我的意思是,我根据传递的参数为搜索选项建立排序顺序 我在其中一个示例中看到了,其中 let $options := <search:options> <search:operator name="sort"> <search:state name="r

我正在为搜索编写Rest扩展,这将在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)
let$选项:=
返回
搜索:搜索(“lange排序:年份,$options)
但即使在这里,也有一些硬编码来对字段进行排序。我想做一些类似于自定义约束的事情,在运行时确定排序顺序列


这可能吗???

好吧,你举的例子,你提到它是硬编码的。在这种情况下,它只是XML。在此步骤之前,您可以使用编程逻辑来决定元素和排序顺序,并相应地构建XML。下面的小示例对title元素进行升序或降序排序。这个小小的例子可以帮助你理解在更大范围内你可能会做什么

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)
let$sort direction:=“递减”
让$options:=
返回
搜索:搜索(“lange排序:年份,$options)
有关指定动态搜索选项的更多信息,请参阅。这使您的中间层能够更好地控制搜索过程。