Программа продолжает работать при использовании упругого поиска в Java - PullRequest
0 голосов
/ 17 января 2020

Я попытался запустить простую поисковую прокрутку эластичного поиска, используя Java API высокого уровня, и он возвращает результаты поиска, но программа продолжает работать после извлечения всех данных ....

Почему это продолжать работать и как это исправить?

public boolean ScrollUsers( UserSegmenter ref ) throws IOException {
        final Scroll scroll = new Scroll(TimeValue.timeValueSeconds(10));
        SearchRequest searchRequest = new SearchRequest("usertest");
        searchRequest.scroll(scroll);
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        //searchSourceBuilder.query(MatchQuery("title", "Elasticsearch"));
        searchRequest.source(searchSourceBuilder);

        SearchResponse searchResponse = client.search( searchRequest, RequestOptions.DEFAULT );
        String scrollId = searchResponse.getScrollId();
        SearchHit[] searchHits = searchResponse.getHits().getHits();

        while (searchHits != null && searchHits.length > 0) {
            // I am printing fetched data here

            SearchScrollRequest scrollRequest = new SearchScrollRequest(scrollId);
            scrollRequest.scroll(scroll);
            searchResponse = client.scroll(scrollRequest, RequestOptions.DEFAULT);
            scrollId = searchResponse.getScrollId();
            searchHits = searchResponse.getHits().getHits();
        }
        ClearScrollRequest clearScrollRequest = new ClearScrollRequest();
        clearScrollRequest.addScrollId(scrollId);
        ClearScrollResponse clearScrollResponse = client.clearScroll(clearScrollRequest, RequestOptions.DEFAULT);
        return clearScrollResponse.isSucceeded();
    }

В моем коде больше нет запущенных потоков ... Эта функция предназначена только для тестирования.

РЕДАКТИРОВАТЬ: Это не время l oop. Я пытался удалить его, результаты те же

public static void main(String[] args) {
        //System.out.println("hi");
        UserSegmenter obj = new UserSegmenter();
        obj.segmentUsers();
        System.out.println("finishing main");
    }

Я получаю сообщение "Finning Main", но программа продолжает работать

1 Ответ

0 голосов
/ 17 января 2020

Я нашел ответ .... Мне пришлось вручную закрыть соединение с БД ... и это сработало

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...