2017-02-06 25 views
0

合計數:添加身份證件(1,2,...),以一個彈性的搜索查詢和我有一個ES查詢每個ID

GET /myindex/_search 
{ 
    "query": { 
     "query_string" : { 
      "default_field" : "content", 
      "query" : "this AND that OR thus" 
     } 
    } 
} 

我想

  1. 將搜索結果限制特定user_ids(過濾器?)
  2. 彙總每位USER_ID計數

所以類似的MySQL查詢是SELECT user_id, COUNT(*) WHERE user_id IN (1, 2, ...) AND (content LIKE '%this%' ...) GROUP BY user_id

  • _id不是user_id我想分組和聚合計數,它是一個內部字段。

我該如何在ElasticSearch中做到這一點?

回答

1

您可以使用terms查詢和另一terms聚集在user_id場,就像這樣:

{ 
    "query": { 
     "bool": { 
     "must": { 
      "query_string": { 
       "default_field": "content", 
       "query": "this AND that OR thus" 
      } 
     }, 
     "filter": { 
      "terms": { 
       "user_id": [ 
        1, 
        2, 
        3 
       ] 
      } 
     } 
     } 
    }, 
    "aggs": { 
     "by_user": { 
     "terms": { 
      "field": "user_id" 
     } 
     } 
    } 
} 
+0

太多的運氣,工作的第一次。我現在試圖只帶回聚合部分。方向?順便說一句,除了官方的ES文檔,任何推薦的金手指示例? – Noam

+1

在''query''上面加''size「:0'。官方文檔非常全面,可以幫助您。 – Val