【发布时间】:2018-02-21 07:52:21
【问题描述】:
我有一个这样的列参与度以及其他列
记录 1
"date":"2017-11-23T06:46:04.358Z",
"remarks": "test1",
"engagement": [
{
"name": "comment_count",
"value": 6
},
{
"name": "like_count",
"value": 2
}
],
....
....
记录 2
"date":"2017-11-23T07:16:14.358Z",
"remarks": "test2",
"engagement": [
{
"name": "comment_count",
"value": 3
},
{
"name": "like_count",
"value": 9
}
],
....
....
我以数组格式存储对象,现在我想按任何给定对象名称的 desc 顺序对数据进行排序,例如like_count 的值或 share_count 的值。
所以如果我按 like_count 排序,那么 2nd 记录应该在第一条记录之前,因为 2nd 记录的 like_count 值为 9与第一条记录的like_count的值2相比。
如何在 elasticsearch 中做到这一点?
【问题讨论】:
-
Pfff,如果你有一个单独的字段来组合值本身和名称,你会更好地对其进行排序。
-
你那里有一组已知的
names 吗?例如,可以创建一个名为like_count_value的字段,该字段应包含类似9_like_count的值? -
我有多种参与度值(例如,share_count、追随者、关注者、到达率等),所以如果我创建列,那么每次出现新的参与度键时我都必须创建新列。当前结构支持任何类型的参与值,而无需通过在数组中附加键/值来创建新列。
-
我理解你所说的,我理解这样更舒服:-)。但是,就性能而言,你不会有更好的方式。
-
我得到了类似的东西,但它没有按预期工作。 { "_source": ["engagement"], "sort": { "engagement.value": { "order": "desc", "nested_filter": { "term": { "engagement.name": "like_count" } } } } }
标签: elasticsearch