2017-02-14 4 views
0

У меня есть сценарий:Упругий поисковый запрос по индексам с некоторым диапазоном дат

У меня есть следующие показатели в поиске эластичности.

  • индекс-2016.04.10
  • индекс-2016.04.11
  • индекс-2016.04.12
  • индекс-2016.04.15
  • индекс-2016.04.16
  • индекс-2016,04. 18

Теперь предположим, что я хочу найти некоторые данные в поиске эластичности между датами - 2016.04.11 по 2016.04.16. Мои вопросы:

  1. У нас есть какой-либо способ запустить один запрос и определить некоторые параметры фильтра, так что поиск будет происходить только в показателях между этими двумя датами?

  2. Если нет, то как мы можем оптимизировать поисковый запрос. Если нам нужно искать данные в некотором диапазоне индексов?

  3. Java реализация.

Пожалуйста, помогите ..

+0

Вы хотите сделать * диапазон дат * поиск между этими индексами или запросить данные в пределах определенного диапазона дат * индекса? – Kulasangar

+0

Я имею в виду диапазон поиска дат между этими индексами. – pbajpai21

ответ

0

Я вижу два варианта.

Вы определяете индексы при поиске таких как

GET /index-2016.04.10,index-2016.04.11,index-2016.04.12/_search?ignore_unavailable=true 
{ 
    "query": { 
     yourquery 
    } 
} 

или фильтра в запросе (Но этот подход может быть медленным, и зависит от количества индексов могут выбросить исключение осколка, так как вы будете запрашивать все индексы, совпадающие с рисунок)

GET /index-*/_search 
{ 
    "query": { 
     "terms" : { 
      "_index" : ["index1", "index2"] 
     } 
    } 
} 

Я предполагаю, что вы будете индексировать данные в прошлом, как последние 7, 14, 30 дней: так что в этом случае я бы определенно пойти с первым подходом, сделать расчет имя индекса в приложении

UPDATE 1: Для того, чтобы предотвратить ошибки для не существующих indicies вы можете установить флаг ignore_unavailable

UPDATE 2: Ну я вам нужно сделать поиск в прошлом один из раствора может быть имеющий в работе агрегирования.

В ES есть reindex api

POST _reindex 
{ 
    "source": { 
    "index": ["twitter", "blog"] 
    }, 
    "dest": { 
    "index": "all_together" 
    } 
} 

Вы будете иметь ежедневный показатель до 7 дней. Затем в понедельник 0: 0 вы суммируете данные с недельным индексом.

У вас будет еженедельно до 5 указателей. Снова последний день месяца вы переводите на ежемесячный индекс.

В запросе вы комбинируете множественный подход, указав, какие индексы вы хотите искать и фильтровать запрос.

+0

@Bilyachat, спасибо за быстрый ответ, этот подход, который я знаю, чтобы использовать этот подход, мы должны знать все существующие индексы, но предположим, что мы хотим искать все индексы между двумя датами, и может быть, что для некоторых дат между ними есть нет журналов, поэтому нет индекса для этих дат, в этом случае я получу исключение, не найденное в индексе. – pbajpai21

+0

@ pbajpai21 см. Обновление –

+0

, тогда в этом случае вы можете просто запросить журналы из всех индексов на основе некоторой временной метки или чего-то для создания журнала. – user3775217