2016-06-28 3 views
0

У меня есть кластер из 10 узлов, где я индексирую около 100 миллионов записей ежедневно. Всего около 6 миллиардов записей. Я постоянно загружаю данные. Каждая запись содержит около 75 полей. 99% моих запросов основаны на одном полевом запросе. По существу выберите * из таблицы, где groupid = 'value'. Большинство возвращаемых запросов возвращают около сотни записей.Elasticsearch кэширует одно поле для быстрого ответа

Мои запросы в настоящее время занимают около 30 секунд, чтобы запустить первые 2 раза, а затем в миллисекундах. Проблема в том, что все пользовательские запросы ищут другой идентификатор группы, поэтому запросы будут медленными по большей части, пока они не запустит его в третий раз.

Возможно ли «кэшировать» поле groupid, чтобы я мог получить второстепенные запросы.

Мой текущий запрос выглядит так. (Псевдопользователь-запрос) (я использую неанализируемое поле, которое я считаю, что лучше?)

query : { 
    filtered : { 
    filter : { 
     "term" : { groupID : "valuex" } 
       } 
      } 
     } 

Я "ве исследовал и не знает, как идти об этом. Я посмотрел в doc_values ​​= да и возможно кэш поле?

Я не забочусь о выигрыше, заполнителей. Мой единственный случай использования, чтобы отфильтровать записи и только возвращая 100 или так из 5 миллиардов, которые имеют правильную идентификатор_группы.

у нас есть о 64G памяти на каждом сервере.

Просто ищите помощь по h для достижения оптимальной производительности/кэширования? или что-нибудь еще, что могло бы помочь.

Я думал о маршрутизации, но это было бы сложно на основе наших значений groupid.

благодаря

+0

Какая версия? – dadoonet

+0

Запуск 2.1 – user2092856

ответ

1

Начиная с elasticsearch 2.0 мы сделали некоторые caching changes, как:

  • Отслеживает 256 наиболее часто используемых запросов
  • только кэширует те, которые появляются в 5 раз или больше
  • DoES не кеш-сегменты, которые имеют менее 10000 документов или 3% документов индекса

Удивление, если вы нажмете этот последний. Обратите внимание, что мы сделали это, потому что кеш Файловой системы, вероятно, лучше, чем внутреннее кэширование.

Не могли бы вы попробовать с помощью запроса bool вместо отфильтрованного запроса BTW? Filtered has been deprecated (и удаляется в версии 5.0). И посмотрите, как это работает?