Scrolls в ES


#1

Здравствуйте! У меня такая проблема: мне нужно сравнить определенный field в моем индексе и провести расчеты, которые потом сохраняются в другой индекс в processResults(hit1, hit 2). Для этого я использую scroll с двумя разными queries. После первой итерации все зависает. Подскажите, пожалуйста, в чем моя проблема.

    QueryBuilder qb = prefixQuery("src", "s");


    SearchResponse scrollResp = client.prepareSearch(index)
            .setScroll(new TimeValue(60000))
            .setQuery(qb)
            .setSize(100)
            .execute()
            .actionGet(); 

    while (true) {
        for (SearchHit hit : scrollResp.getHits().getHits()) {
            //Handle the hit...
            QueryBuilder qb2 = prefixQuery("src", "src");

            SearchResponse scrollResp2 = client.prepareSearch(index)
                        .setScroll(new TimeValue(60000))
                        .setQuery(qb2)
                        .setSize(100)
                        .execute()
                        .actionGet();
           while (true) {
                for (SearchHit hit2 : scrollResp2.getHits().getHits()) {
                   processResults(hit1, hit2)
                }
                scrollResp2 = client.prepareSearchScroll(scrollResp2.getScrollId()).setScroll(new TimeValue(60000)).execute().actionGet();
                //Break condition: No hits are returned
                if (scrollResp2.getHits().getHits().length == 0) {
                    break;
                }
            }
        }
        scrollResp = client.prepareSearchScroll(scrollResp.getScrollId()).setScroll(TimeValue.timeValueMinutes(1)).execute().actionGet();
        //Break condition: No hits are returned
        if (scrollResp.getHits().getHits().length == 0) {
            break;
        }

    }


(Igor Motov) #2

Где и как зависает?


#3

Спасибо, я думаю разобралась с этим. Были выставлены неправильные параметры для timeout.


(system) #4