【问题标题】:Elastic search order by count of nested object按嵌套对象计数的弹性搜索顺序
【发布时间】:2013-11-05 17:34:08
【问题描述】:

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

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

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

【问题讨论】:

    标签: search elasticsearch tire


    【解决方案1】:

    你有两个选择 -

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-30
      • 1970-01-01
      • 1970-01-01
      • 2018-08-21
      • 1970-01-01
      相关资源
      最近更新 更多