如何对路径范围索引元素进行排序?

时间:2013-09-25 07:38:34

标签: xml xquery marklogic

我有一个元素 DateTimeList ,其第一个子元素的PathRangeIndex如下:

  

/ ResultPage / DateTimeList /日期时间[1]

通常我们使用属性对元素进行排序,如下所示:

<sort-order type="xs:string" direction="ascending">
    <element ns="" name="div"/>
    <attribute ns="" name="order"/>
</sort-order>

是否有类似的方法使用其第一个子元素(使用path-range-index)对 DateTimeList 元素进行排序。我尝试如下:

<sort-order direction="ascending" type="xs:dateTime">
   <path-index>/ResultPage/DateTimeList/DateTime[1]</path-index>
</sort-order><sort-order><score/></sort-order></state></operator>

但结果没有变化如下:

<DateTimeList>
   <DateTime>2014-05-07T10:26:00</DateTime>
</DateTimeList>
<DateTimeList>
   <DateTime>2013-12-01T00:00:00</DateTime>
   <DateTime>2014-05-01T00:00:00</DateTime>
   <DateTime>2014-12-01T00:00:00</DateTime>
</DateTimeList>
<DateTimeList>
   <DateTime>2013-09-01T10:32:42</DateTime>
</DateTimeList>
<DateTimeList>
   <DateTime>2014-05-30T00:00:00</DateTime>
   <DateTime>2015-05-30T00:00:00</DateTime>
</DateTimeList >

感谢。

2 个答案:

答案 0 :(得分:5)

MarkLogic Search API的当前版本实际上不支持按路径索引排序。但是,您构建了一个表达式,只要产品中有该支持,它就会起作用。有计划介绍它。

我建议您使用search:check-options($options)查看您的选项是否有效。我相信在这种情况下, check-options 会报告该节点无效。

答案 1 :(得分:0)

此处没有足够的信息来重现问题,但同一文档中的所有DateTimeList元素都是?或者每个文档有多个DateTimeList元素?

搜索和排序主要发生在文档级别。 MarkLogic是一个面向文档的数据库。因此索引指向文档,这些文档的行为与RDBMS表中的行类似。

如果是这样,请考虑拆分文件。技术上可以在DateTimeList上进行分段,并在searchable-expression上添加//DateTimeList。但我的经验是,最好先将文档组织在合适的层次上。