2017-08-11 145 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