我有一个包含此表单项的索引。
{
"_index": "identity-index",
"_source": {
"names": [
"test"
],
"private": {
"lists": [
{
"listId": "56b8a0197f3c56654f8751b5",
"ratings": [
{
"rating": 4,
"authorId": "56499b7a97e3aa857cdc4f1d"
},
{
"rating": 4,
"authorId": "56b36646a24d50866de77928"
},
{
"rating": 4,
"authorId": "56cb16005082871b33ab1a60"
},
{
"rating": 4,
"authorId": "56b216a4c28edca956fe96d4"
},
{
"rating": 4,
"authorId": "56b34e8d8e324180259252f7"
}
]
},
{
"listId": "56c1c508da49cdd9662b102c"
}
]
}
},
"sort": [
"-Infinity"
]
}我想根据listId的平均评级对它们进行排序:
我试过很多种方法,最接近的方法是:
"sort": {
"private.lists.ratings.rating": {
"missing": "_last",
"order": "desc",
"mode": "avg",
"nested_path": "private.lists.ratings",
"nested_filter": {
"term": {
"private.lists.listId": "56c1c508da49cdd9662b102c"
}
}
}
},问题是,这将所有的东西都打分为-Inf。我找不到任何方法来对private.lists.ratings中的嵌套元素进行排序,但要考虑到private.lists.listId的过滤器。nested_path和nested_filter字段是不同的,我认为它们不应该是这样的。
发布于 2016-02-26 09:57:40
如果使用ratings类型分析nested字段,则可以通过在每个嵌套对象中复制listId来获得所需的内容。
不幸的是,嵌套对象不是主文档的一部分,nested_filter (和nested_sort)只能根据每个子文档中包含的属性消除歧义。
一个解决方案可能是将您的结构简化为一个简单的对象列表,如下所示
{
"listId": "56b8a0197f3c56654f8751b5",
"rating": 4,
"authorId": "56499b7a97e3aa857cdc4f1d"
}https://stackoverflow.com/questions/35647745
复制相似问题