2017-08-11 93 views
0

需要弹性搜索中聚合的帮助。是否有可能agreggate数组或列表中的特定字段的值 - 这是更例如分组,而不是得到的结果弹性搜索中的聚合

{"Book_Id":"102","Review_Text":"DescentRead"},{"Book_Id":"102","Review_Text":"For Kids."},{"Book_Id":"103","Review_Text":"Great"},{"Book_Id":"103","Review_Text":"Excellent"} 

我可以得到每本书作为一个列表的所有评论?

[ { Book_Id: 102, Review_Text: [ "DescentRead", "For Kids"], { Book_Id: 103, reviews: [ "Great","Excellent"] } ] 

尝试了一些与aggs但不能得到它的踪迹。任何指针都会帮助!

回答

0

可以聚合顶级点击工作?限制是您需要指定每个聚合的最大点击量(将在评论文本排序的示例中返回每个图书ID的前100个结果),但除此之外,您可以将其作为普通查询运行并指定要返回的字段,它们的排序方式(获取最高命中)等

例AGGS查询:

POST 
http://myserver:9200/books/book/_search 
{ 
    "size": 0, 
    "aggs": { 
    "BookReviews": { 
     "terms": { 
     "field": "Book_Id.keyword" 
     }, 
     "aggs": { 
     "top_reviews": { 
      "top_hits": { 
      "sort": [ { "Review_Text.keyword": { "order": "desc" } } ], 
      "size": 100, 
      "_source": { 
       "includes": [ "Review_Text" ] 
      } 
      } 
     } 
     } 
    } 
    } 
} 

注意,名称为聚合(“BookReviews”和“top_reviews” )您可以使用您选择的任何名称,并且相同的名称将出现在生成的聚合树中。您可以根据索引中的条款进行多级汇总,并在任何级别上包括顶级匹配,通常用于深入报告或类似案例。使用

映射:

{ 
    "books": { 
    "mappings": { 
     "book": { 
     "properties": { 
      "Book_Id": { 
      "type": "text", 
      "fields": { 
       "keyword": { 
       "type": "keyword", 
       "ignore_above": 256 
       } 
      } 
      }, 
      "Review_Text": { 
      "type": "text", 
      "fields": { 
       "keyword": { 
       "type": "keyword", 
       "ignore_above": 256 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 

“大小”:在根节点0将省略任何命中为搜索并只返回AGGS树木。 如果您需要在弹性开始聚合之前过滤结果,还可以在大小相同的级别添加普通“查询”:{}块。

更多的elasticsearch文档页: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-top-hits-aggregation.html

(如果你提供一个更完整的示例数据集,我们可以给出一个更现实的例子查询,因为没有在本例中为大量的数据排序或评分结果)

+0

这可以使用Java Jest Client来完成吗? – Sajna

+0

@ShabnaMt我对Jest客户端不熟悉,但它似乎可以通过将查询构建为字符串并对结果使用getAggregations()/ getTermsAggregation方法来完成(您将对名称ans有很强的依赖性迭代结果时查询中的结构)。 https://github.com/searchbox-io/Jest/blob/master/jest/src/test/java/io/searchbox/core/search/aggregation/TermsAggregationIntegrationTest.java 可能还有其他方法来构建查询除了自己创建字符串外,如果情况与示例中一样简单,则应该按原样运行 – Peter