2015-09-22 2 views
0

Я хотел бы узнать, возможно ли ускорить агрегирование терминов Elasticsearch.Ускорение агрегирования терминов elasticsearch/SELECT DISTINCT

Моя фактическая цель состоит в том, чтобы выбрать несколько отдельных полей для некоторого запроса, например, это запрос, который я бы использовал примерно так. Это потенциально может включать вложенные документы позже:

{ 
    "query" : { 
    "match" : { 
     "Company" : "samsung" 
    } 
    }, 
    "aggs" : { 
    "Products" : { 
     "terms" : { 
     "field" : "ProductCode" 
     } 
    }, 
    "Countries" : { 
     "terms" : { 
     "field" : "CountryCode" 
     } 
    } 
    } 
} 

Так что я бы найти все соответствующие документы, которые самсунг в его компании и агрегировать все его productCodes и countryCodes (они целые).

Есть ли способ ускорить такой запрос? Меня не волнует фактический возврат doc_count, все, что мне нужно, это разные значения. Может быть, есть какой-то намек или лучшее агрегирование, чтобы это сделать?

ответ

2

Если вы используете запрос фильтра, а не обычный запрос, он будет улучшить свой первоначальный выполнения:

{ 
    "query" : { 
    "filtered": { 
     "term": {"yourField": "samsung"} 
    } 
    }, 
    "aggs" : { 
    // ... 
    } 
} 

Это потому, что фильтр запросы годен/не годен, вместо того, чтобы быть засчитан.

Остальные вещи, которые вы можете сделать, - это установить ваше сопоставление для хранения этих полей как doc_values, что существенно сократит требования к памяти, необходимые для выполнения этих агрегаций, и настроит eager loading на эти поля, чтобы ES предварительно загрузила эти данные и иметь его доступным для агрегации, а не загружать его по требованию, что улучшит время отклика.

Мы не испытывали многого в обратном направлении с помощью doc_values ​​- это четкий сквозной выигрыш, когда вы выполняете какую-либо значительную работу по объединению. Нежелательная загрузка приведет к более медленному обновлению, но может быть приемлемой, если вы более чувствительны к своевременным запросам, чем для обновления скорости.

+0

Это звучит совершенно правильно для меня. Наши данные обновляются еженедельно (+/-), поэтому скорость ответа намного важнее, чем скорость обновления. Большое спасибо! –