2017-02-06 9 views
0

У меня есть запрос ES:Добавление Идентификационный номер (1, 2, ...) в упругом поискового запроса и агрегатных отсчетов в ID

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

Я хотел бы

  1. Ограничить результаты конкретных user_ids (Filter?)
  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

Слишком много удачи, работал в первый раз. Теперь я пытаюсь вернуть агрегатную часть. Направление? btw, кроме официальных документов ES, любые рекомендуемые примеры чит-листов? – Noam

+1

Добавьте '' размер ": 0' над' "query" '. Официальный документ довольно всеобъемлющий и может заставить вас идти. – Val

 Смежные вопросы

  • Нет связанных вопросов^_^