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

问题描述 投票:1回答:1

我使用Query Options创建了一个facet,如下所示。

"constraint": [
  { 
    "name": "Full Name",
    "range": 
      {
        "type": "xs:string",
        "element": {"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 marklogic-9
1个回答
0
投票

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

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

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

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

希望有所帮助,

© www.soinside.com 2019 - 2024. All rights reserved.