Как определить время ожидания запроса для эластичного поискового запроса данных весны? - PullRequest
0 голосов
/ 15 января 2019

Мой вопрос более общий, если предположить, что у меня есть простой запрос, подобный этому, к упругому поиску

Page<MyEntity> findAll(Pageable pageable);

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

Есть ли способ сделать это? способ установить время ожидания для запросов Spring-data -asticsearch, чтобы я мог быть уверен, что ничего не получится слишком долго?

1 Ответ

0 голосов
/ 12 апреля 2019

Одним из способов достижения «тайм-аута» в запросе поискового запроса является использование параметра «тайм-аут» в самом запросе. здесь

Предположим, что мы хотим выполнить полнотекстовый «запрос на совпадение», мы можем добавить «тайм-аут» перед самим запросом:

 {
    "timeout": "1ms",
    "query": {
        "match" : {
            "description" : "This is a fullText test"
        }
    }
}

Вам придется использовать единицы времени Elasticsearch, как указано здесь , и отправлять их как строковые значения.

В вашем случае - я не вижу способа достичь этого с помощью репозитория spring-data-es, но - вы можете добавить пользовательскую функциональность в свой репозиторий и использовать ElasticsearchIndexTemplate с matchAllQuery () (Java эластичный API),

Нечто подобное ( еще не проверял ):

    nodeEsTemplate.getClient().prepareSearch("test-index")
            .setQuery(QueryBuilders.matchAllQuery())
            .setTimeout(TimeValue.timeValueMillis(1))
            .execute().actionGet();

Поскольку nodeEsTemplate имеет тип ElasticsearchIndexTemplate и предполагается, что вы создали собственный метод findAllWithTimeOut в своем классе репозитория.

...