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