2

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

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

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

4

1 回答 1

13

你有两个选择——

  1. 使用脚本获取数组的长度。所以你会做这样的事情:

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

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

于 2013-10-26T19:16:26.723 回答