Akka: Http-клиент для достижения потокового поиска с использованием Scroll / Slice API в ElasticSearch - PullRequest
0 голосов
/ 20 мая 2019

ElasticSearch версия: 5.1.1

Мне нужно получить один индекс, содержащий миллионы документов. По сути придется использовать Scroll с Slice . Есть 5 осколков. Обратите внимание, что мы не можем использовать Alpakka из-за версии, на которой работает эластичный поиск.

  1. Для этого сначала нужно сделать http-запрос к ElasticSearch
 POST /twitter/tweet/_search?scroll=3m 
     { 
     "size": 100,
     "query": {
         "match_all" : {} } 
     }

Однако я хотел еще больше укрутить прокрутку на 5, чтобы повысить производительность. В рамках этого я хотел иметь возможность инициировать 5 параллельных HTTP-запросов (другой идентификатор слайса), как показано ниже

 POST /twitter/tweet/_search?scroll=3m 
     { 
     "slice": {
         "id": 0 },
     "size": 100,
     "query": {
         "match_all" : {} } 
     }

 POST /twitter/tweet/_search?scroll=3m 
     { 
     "slice": {
         "id": 1 },
     "size": 100,
     "query": {
         "match_all" : {} } 
     }

 POST /twitter/tweet/_search?scroll=3m 
     { 
     "slice": {
         "id": 2 },
     "size": 100,
     "query": {
         "match_all" : {} } 
     }

 POST /twitter/tweet/_search?scroll=3m 
     { 
     "slice": {
         "id": 3 },
     "size": 100,
     "query": {
         "match_all" : {} } 
     }

 POST /twitter/tweet/_search?scroll=3m 
     { 
     "slice": {
         "id": 4 },
     "size": 100,
     "query": {
         "match_all" : {} } 
     }

 POST /twitter/tweet/_search?scroll=3m 
     { 
     "slice": {
         "id": 4 },
     "size": 100,
     "query": {
         "match_all" : {} } 
     }
  1. Ожидается, что каждый из указанных выше HTTP-запросов будет возвращать отдельный идентификатор прокрутки, с помощью которого документы могут быть повторены с последующими http-запросами.
POST /_search/scroll  
{
"scroll" : "1m", 
"scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAAD4WYm9laVYtZndUQlNsdDcwakFMNjU1QQ=="  
}

Я новичок в AkkaHttp и изо всех сил пытаюсь понять из документа Akka http о том, как инициировать 5 параллельных запросов, поэтому у меня есть следующие вопросы:

  • Я могу придумать отдельный поток для пути для каждого, как показано ниже. Есть ли другой вариант?
   1) Source1 -> Flow1 -> Sink1 
   2) Source2 -> Flow2 -> Sink2 
   3) Source3 -> Flow3 -> Sink3 
   4) Source4 -> Flow4 -> Sink4 
   5) Source5 -> Flow5 -> Sink5
  • Как инициировать последующие запросы после завершения ответа в Sink?
...