2014-11-28 3 views
3

Я использую Elasticsearch 1.4.0 и опробовать функцию агрегирования. Я продолжаю получать SearchParseException с сообщением Cannot find aggregator type [fieldName] in [aggregationName].Агрегация на основе двух полей в результатах поиска Elasticsearch в SearchParseExcepetion с «не может найти тип агрегатора»

В формате JSON мои данные выглядят следующим образом.

{ "userCode": "abcd123", "response": 1 } 
{ "userCode": "abcd123", "response": 1 } 
{ "userCode": "abcd123", "response": 0 } 
{ "userCode": "wxyz123", "response": 0 } 
{ "userCode": "wxyz123", "response": 0 } 
{ "userCode": "wxyz123", "response": 1 } 

Обратите внимание, есть 2 пользователей, abcd123 и wxyz123, и я просто хочу, чтобы подсчитать количество раз, каждый откликнулся 1 и 0. Если я ставлю эти данные в таблицу SQL в SQL выберите синтаксис, я будет делать что-то подобное (если этот пример SQL помогает проиллюстрировать то, что я пытаюсь сделать).

select userCode, response, count(*) as total 
from response_table 
group by userCode, response 

Я ожидаю, что набор результатов будет выглядеть следующим образом.

abcd123, 0, 1 //user abcd123 responded 0 once 
abcd123, 1, 2 //user abcd123 responded 1 twice 
wxyz123, 0, 2 //user wxyz123 responded 0 twice 
wxyz123, 1, 1 //user wxyz123 responded 1 once 

Для Elasticsearch моя агрегация JSON выглядит следующим образом.

{ 
"aggs": { 
    "users": { 
    "terms": { "field": "userCode" }, 
    "aggs": { 
    "responses" : { 
    "terms": { "field": "response" } 
    } 
    } 
    } 
} 
} 

Однако я получаю SearchParseException: Cannot find aggregator type [responses] in [aggs]. Что я делаю не так?

Если это помогает, файл сопоставления очень прост и выглядит следующим образом.

{ 
    "data": { 
    "properties": { 
     "userCode": { 
     "type": "string", 
     "store": "yes", 
     "index": "analyzed", 
     "term_vector": "no" 
     }, 
     "response": { 
     "type": "integer", 
     "store": "yes", 
     "index": "analyzed", 
     "term_vector": "yes" 
     } 
    } 
    } 
} 
+0

Код, который вы опубликовали (включая сопоставления, фактические данные), работает для меня. В 1.4.0. –

ответ

2

Следующая агрегация работал для меня (он получил мне результаты, которые я хотел), но я все же хотел некоторые разъяснения о том, почему мой предыдущий подход привел к SearchParseException.

{ 
"aggs": { 
    "users": { 
    "terms": { "field" : "userCode" }, 
    "aggs": { 
    "responses": { 
    "histogram": { "field": "response", "interval": 1 } 
    } 
    } 
    } 
} 
} 
+0

Я неправильно прочитал документацию и думал, что вложенные 'aggs' были дочерними элементами корневого' aggs', когда он фактически является частью группы (что также было вашей первоначальной ошибкой). Спасибо, что опубликовал это, я сходил с ума, уверенный, что все делаю правильно. – makhdumi