我使用查询选项创建了一个构面,如下所示。
"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)并在该复合属性上创建一个范围索引。是建议的方法吗?
答案 0 :(得分:0)
Facets是根据范围索引构建的。范围索引等效于单列或原子值数组。构面无法按源文档中的其他值对范围索引中的值进行排序。
如您所建议,一种替代方法是将排序所需的所有值连接起来。
在MarkLogic 9中,另一种选择是使用TDE创建多列索引,并使用Optic API对一列进行排序,但在另一列上返回或group的值。
TDE和Optic与Search API没有任何集成,因此您需要针对整组匹配的文档,从分面分析中收集单独的搜索结果页面。
希望有帮助,