MarkLogic - 查询选项 - 对多个属性进行排序

MarkLogic - Query Options - sort on multiple properties

我使用查询选项创建了一个方面,如下所示。

"constraint": [
  { 
    "name": "Full Name",
    "range": 
      {
        "type": "xs:string",
        "element": {"name": "Full Name" }
      }
  }
]

我看到 "Full Name" 属性在 "facet" 属性 下按排序顺序返回,而且,我们可以控制排序顺序(升序与降序)。

"facets": {
  "Full Name": {
    "type": "xs:string",
    "facetValues": [
      {
        "name": "John H",
        "count": 1,
        "value": "John H"
      },
      {
        "name": "Mary",
        "count": 1,
        "value": "Mary"
      }
    ]
  }
}

但是,我的要求是先根据角色​​对名称进行排序,然后再根据名称对名称进行排序。例如,John 是 HR 而 Mary 是会计,因此 Mary 应该出现在 John 之前,因为在排序顺序中她的角色(会计)在 John 的角色(HR)之前。有没有办法可以按其他属性对索引约束进行排序?

我听说的一种方法是创建复合 属性(角色+名称)并在复合 属性 上创建范围索引。这是建议的方法吗?

构面是根据范围索引构建的。范围索引相当于单个列或原子值数组。构面无法按源文档中的其他值对范围索引中的值进行排序。

正如您所建议的,一种替代方法是连接排序所需的所有值。

在 MarkLogic 9 中,另一种替代方法是使用 TDE 创建多列索引并使用 Optic API 对一列进行排序,但 return 的值或分组不同的列。

TDE 和 Optic 与搜索 API 没有任何集成,因此您需要从整个匹配文档集的方面分析中单独收集一页搜索结果。

希望对您有所帮助,