我使用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 9中,另一种替代方法是使用TDE创建多列索引,并使用Optic API对一列进行排序,但在不同列上返回值或group。
但是,TDE和Optic没有与Search API进行任何集成,因此您需要从整个匹配文档集的构面分析中单独收集一页搜索结果。
希望有所帮助,