我想根据它们的嵌套属性对文档进行排序。 鉴于我有以下文件:
{
"id": 1,
"attributes": [
{
"name": "a",
"value": 1
},
{
"name": "b",
"value": 2
}
]
}
{
"id": 2,
"attributes": [
{
"name": "a",
"value": 2
},
{
"name": "b",
"value": 2
}
]
}
{
"id": 3,
"attributes": [
{
"name": "b",
"value": 1
}
]
}
排序应比较相同属性的值,因此应首先进行比较属性" a"的值。
如果组" a"的值它们是相同的,然后应该继续比较属性" b"。
如果缺少整个组,则缺少该属性的文档将丢失比较。
属性可以包含任何名称和值,因此事先不知道属性名称。
我已经在我的客户端应用程序中编写了这个算法,我只需要一种方法来使用ElasticSearch。
答案 0 :(得分:0)
您可以尝试在两个查询中执行此操作。以下都没有经过测试,它只是为了给你一个考虑的方向。
第一个查询是一个聚合,用于获取attribute.name
第二个包含您的实际查询,其中包含sort
的以下内容(您必须根据上述结果生成此类别)
{
"query": {"match_all": {}},
"sort": [
{
"attributes.value": {
"nested_path": "attributes",
"nested_filter": {"term": {"attributes.name": "a"}}
}
},
{
"attributes.value": {
"nested_path": "attributes",
"nested_filter": {"term": {"attributes.name": "b"}}
}
},
...
]
}