MarkLogic 8 - 按路径索引排序

Posted

技术标签:

【中文标题】MarkLogic 8 - 按路径索引排序【英文标题】:MarkLogic 8 - sort-order by path-index 【发布时间】:2015-04-15 11:10:17 【问题描述】:

ML 8 是否已支持按路径索引排序?我想实现类似于下面的:

<options xmlns="http://marklogic.com/appservices/search">
  <sort-order collation="http://marklogic.com/collation/en/S1/EO/CU/MO" type="xs:string" direction="ascending">
    <path-index>attritbutes//name</path-index>
  </sort-order>
</options>

如果没有,有没有办法做到这一点?我有几个来自不同父节点或根元素的同名元素,所以我不能只使用

<options xmlns="http://marklogic.com/appservices/search">
  <sort-order collation="http://marklogic.com/collation/en/S1/EO/CU/MO" type="xs:string" direction="ascending">
    <element ns="" name="name"/>
  </sort-order>
</options>

【问题讨论】:

【参考方案1】:

根据docs:

排序顺序元素必须具有单个元素子元素、单个分数子元素、单个字段子元素或单个 json-property 子元素之一。

所以你不能有一个路径孩子,但有办法。根据您要使用的路径创建一个字段,然后根据该字段进行排序。

【讨论】:

创建一个字段!!很好的解决方案:) 正如@Dixit 在下面的评论中所指出的,不要忘记根据您的领域创建Field Range Index!它们是排序所必需的。此外,当用于排序时,field 可以包含不超过 一个,并且不一定需要 any(您可以为您的直接指向要排序的元素的字段 - 在我的情况下是必要的,因为我的整个方法是试图避免文档中存在多个相同本地名称的问题,并且如果有多个本地名称,包含仍将返回 many items in sequence 森林错误对于您所包含的内容)。【参考方案2】:

8.0-1 中存在架构错误,因此排序顺序/路径索引无法验证。

但是,代码实现了对排序顺序/路径索引的支持,因此如果您不验证选项,它应该可以工作。不过,按照 Dave 的建议使用字段可能会更好,这样您就可以继续使用验证来检查错误。

架构错误已在 8.0-2 中修复。

【讨论】:

"代码实现了对排序顺序/路径索引的支持" 这是真的吗?我无法在文档(ML v9)中找到对此的任何引用,并且没有运气以这种方式实现它(我最终求助于@Dave 的field 解决方案)。【参考方案3】:

是的,在 'name' 元素上创建一个字段

<options xmlns="http://marklogic.com/appservices/search">
  <sort-order type="xs:string" 
              collation="http://marklogic.com/collation/" 
              direction="ascending">
    <field name="name"/>
  </sort-order>
</options>

【讨论】:

name 元素上创建字段时,create range index(在定义field 时可以选择创建range index),否则会抛出错误。 @Dixit 重要提示!字段范围索引是排序所必需的(根据您的字段创建字段范围索引)。 @FatehKhalsa 谢谢,但我在评论中说了同样的话:)

以上是关于MarkLogic 8 - 按路径索引排序的主要内容,如果未能解决你的问题,请参考以下文章

Sort_values Pandas 按索引排序?

C++ 按索引对向量进行排序

Elasticsearch 列表索引按名称排序

拉出按索引排序的每个 REPEATING 组中的第一个索引记录

如何按相同的索引对两个数组进行排序?

按大多数视图排序的索引