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

时间:2018-09-04 20:25:53

标签: marklogic marklogic-9

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

"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)之前。有没有一种方法可以按其他属性对索引约束进行排序?

我听说的一种方法是创建一个复合属性(role + Name)并在该复合属性上创建一个范围索引。是建议的方法吗?

1 个答案:

答案 0 :(得分:0)

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

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

在MarkLogic 9中,另一种选择是使用TDE创建多列索引,并使用Optic API对一列进行排序,但在另一列上返回或group的值。

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

希望有帮助,