使用Elasticsearch初学者。我觉得这应该很简单,但我被困在这里。我有一个帖子的映射,看起来像这样:
[ post1: {
title: 'asdfasd',
comments: [commment1, comment2, comment3]
},
post2: {
title: 'asdf',
comments: [comment1, comment2]
}
.
.
.]
我正在尝试按标题搜索它们,然后按评论数量排序。我可以通过标题搜索就好了,但是我对如何通过评论计数来排序结果感到有点困惑。这样做最好的方法是什么?
答案 0 :(得分:13)
您有两种选择 -
使用script获取数组的长度。所以你会做类似的事情:
{
"query" : {
....
},
"sort" : {
"_script" : {
"script" : "doc['comments'].values.length",
"type" : "number",
"order" : "desc"
}
}
}
为评论数量保留一个附加字段,每次添加评论时也会增加评论计数器的值,并按其排序。
如果你有大量数据,最好选择#2。使用脚本会产生开销,如果必须在大量文档上计算脚本,则可能会增加搜索时间。 另一方面,按字段排序在性能方面要好得多。我会选择#2。