我有每个文档的文档属性 -
<prop:properties xmlns:prop="http://marklogic.com/xdmp/property">
<prop:last-modified>2017-04-12T04:55:57Z</prop:last-modified>
</prop:properties>
现在我想使用prop:last-modified
对搜索结果进行排序。我要知道的一种方法是use a loop。但是这个循环会对查询的性能产生影响。
有没有其他方法可以使用MarkLogic获取搜索结果?
答案 0 :(得分:2)
cts:search()
允许将订单规范作为其选项之一,您可以使用cts:index-order来设置该选项。
因此,如果您正在prop:last-modified
进行搜索,那么距离cts:search documentation中的示例并不远。不幸的是,这个排序选项会被忽略(可能是一个错误)。
cts:search(fn:doc(), "hello",
("unfiltered",
cts:index-order(
cts:element-reference(
xs:QName("prop:last-modified")),
"descending")))[1 to 10]
请注意,您需要为prop:last-modified
定义元素范围索引。
您的解决方法似乎是处理此问题的最有效和最直接的方法。将搜索结果拉入FLWOR语句,并使用普通的order by
:
for $r in cts:search(fn:doc(), cts:true-query())
order by $r/property::prop:last-modified descending
return $r/property::prop:last-modified