我有一个元素 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 >
感谢。
答案 0 :(得分:5)
MarkLogic Search API
的当前版本实际上不支持按路径索引排序。但是,您构建了一个表达式,只要产品中有该支持,它就会起作用。有计划介绍它。
我建议您使用search:check-options($options)
查看您的选项是否有效。我相信在这种情况下, check-options 会报告该节点无效。
答案 1 :(得分:0)
此处没有足够的信息来重现问题,但同一文档中的所有DateTimeList
元素都是?或者每个文档有多个DateTimeList
元素?
搜索和排序主要发生在文档级别。 MarkLogic是一个面向文档的数据库。因此索引指向文档,这些文档的行为与RDBMS表中的行类似。
如果是这样,请考虑拆分文件。技术上可以在DateTimeList
上进行分段,并在searchable-expression
上添加//DateTimeList
。但我的经验是,最好先将文档组织在合适的层次上。