Xquery 搜索选项中的自定义排序顺序
Custom sort-order in Xquery search options
我正在为搜索编写 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)
但即使在这里也有某种硬编码字段要排序。我想做一些类似自定义约束的事情,在 运行 时间我确定排序顺序列..
这可能吗??
好吧,你给出的例子,你提到它有点硬编码。在这个状态下,就是XML。您可以在此步骤之前使用编程逻辑来决定元素和 sort-order 并相应地构建您的 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)
我正在为搜索编写 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)
但即使在这里也有某种硬编码字段要排序。我想做一些类似自定义约束的事情,在 运行 时间我确定排序顺序列..
这可能吗??
好吧,你给出的例子,你提到它有点硬编码。在这个状态下,就是XML。您可以在此步骤之前使用编程逻辑来决定元素和 sort-order 并相应地构建您的 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)