按嵌套对象计数的弹性搜索顺序

时间:2013-10-26 17:11:33

标签: search elasticsearch tire

使用Elasticsearch初学者。我觉得这应该很简单,但我被困在这里。我有一个帖子的映射,看起来像这样:

[ post1: {
   title: 'asdfasd',
   comments: [commment1, comment2, comment3]
},
post2: {
   title: 'asdf',
   comments: [comment1, comment2]
}
.
.
.]

我正在尝试按标题搜索它们,然后按评论数量排序。我可以通过标题搜索就好了,但是我对如何通过评论计数来排序结果感到有点困惑。这样做最好的方法是什么?

1 个答案:

答案 0 :(得分:13)

您有两种选择 -

  1. 使用script获取数组的长度。所以你会做类似的事情:

    {  
      "query" : {  
        ....  
      },  
      "sort" : {  
        "_script" : {  
          "script" : "doc['comments'].values.length",  
          "type" : "number",  
          "order" : "desc"  
        }  
      }  
    }
    
  2. 为评论数量保留一个附加字段,每次添加评论时也会增加评论计数器的值,并按其排序。

  3. 如果你有大量数据,最好选择#2。使用脚本会产生开销,如果必须在大量文档上计算脚本,则可能会增加搜索时间。 另一方面,按字段排序在性能方面要好得多。我会选择#2。