Marklogic 使用cts:search根据文档属性对文档进行排序

Marklogic 使用cts:search根据文档属性对文档进行排序,marklogic,marklogic-8,Marklogic,Marklogic 8,我有每个文档的文档属性- <prop:properties xmlns:prop="http://marklogic.com/xdmp/property"> <prop:last-modified>2017-04-12T04:55:57Z</prop:last-modified> </prop:properties> 2017-04-12T04:55:57Z 现在我想使用prop:last modified对搜索结果进行排序。我知道的一个

我有每个文档的文档属性-

<prop:properties xmlns:prop="http://marklogic.com/xdmp/property">
  <prop:last-modified>2017-04-12T04:55:57Z</prop:last-modified>
</prop:properties>

2017-04-12T04:55:57Z
现在我想使用
prop:last modified
对搜索结果进行排序。我知道的一个方法是。但是这个循环会对查询的性能产生影响

是否有其他方法仅使用in-MarkLogic获取搜索结果

cts:search()
允许将订单规格作为其选项之一,您可以使用设置该选项

因此,如果您正在搜索
prop:last modified
,则与中的示例相差不远。不幸的是,此排序选项被忽略(可能是一个bug)

请注意,您需要为
prop:last modified
定义元素范围索引

您的变通方法似乎是处理此问题的最有效和最直接的方法。将搜索结果拉入FLWOR语句中,并使用普通的旧
排序依据对其排序:

for $r in cts:search(fn:doc(), cts:true-query())
order by $r/property::prop:last-modified descending
return $r/property::prop:last-modified

这对文档属性有效吗?我试过了,但不起作用。它看起来像是根据文档而不是文档属性进行排序。是否为文档属性定义了元素范围索引?您需要以与文档元素范围索引相同的方式进行设置。我有一个元素范围索引,定义为uri-localname-last modified type-dateTimeSounds,就像索引设置正确一样(只要在名称空间的开头包含“http://”)。“按文档而非文档属性排序”和“不工作”是什么意思?如果不知道实际的
cts:search
调用或输出,我很难提供更具体的故障排除建议。您是否收到了一个错误,或者您是否以错误的顺序返回了文档?我正在使用这个查询-declare namespace prop=“marklogic.com/xdmp/property”;;cts:search(fn:doc(),cts:true-query(),((),(cts:index-order(cts:element-reference(xs:QName(“prop:last-modified”),“升序”))[1到10]我在升序和降序的相同序列中得到相同的结果。这就是为什么我假设排序不能正常工作的原因
for $r in cts:search(fn:doc(), cts:true-query())
order by $r/property::prop:last-modified descending
return $r/property::prop:last-modified