2013-10-26 74 views
2

Elasticsearch初学者。我觉得这应该很简单,但我在这里卡住了。我有一个映射的帖子,看起来像这样:按嵌套对象计数的弹性搜索顺序

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

我试图按标题搜索它们,然后通过评论数订购。我可以通过标题搜索得很好,但我有点困惑,以至于如何通过评论计数排序结果。这样做最好的方法是什么?

回答

13

你有两个选择 -

  1. 使用script得到一个数组的长度。所以,你会做这样的事情:

    { 
        "query" : { 
        .... 
        }, 
        "sort" : { 
        "_script" : { 
         "script" : "doc['comments'].values.length", 
         "type" : "number", 
         "order" : "desc" 
        } 
        } 
    } 
    
  2. 保留其他字段的评论的数量,每次添加评论也增加了注释计数器的值,并且排序它。

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