我的问题更笼统地说,假设我有一个像这样的简单查询即可弹性搜索
Page<MyEntity> findAll(Pageable pageable);
例如,我希望能够为此查询设置超时,以使其不会永远挂起,尽管我阅读了文档,但对如何执行此操作并不清楚。
有什么办法吗?一种为Spring-data-elasticsearch查询设置超时的方法,我可以确保什么都不会太久?
答案 0 :(得分:0)
在搜索请求查询中实现“超时”的一种方法是在查询本身中使用“超时”参数。 here
假设我们要执行全文“匹配查询”,我们可以在查询本身之前添加“超时”:
{
"timeout": "1ms",
"query": {
"match" : {
"description" : "This is a fullText test"
}
}
}
您将必须使用here所述的Elasticsearch时间单位,并将其作为字符串值发送。
以您的情况-我看不到使用spring-data-es存储库实现此目的的任何方法,但是-您可以向存储库中添加自定义功能,并将ElasticsearchIndexTemplate与matchAllQuery( )(java elastic api),
类似的东西(还没有测试):
nodeEsTemplate.getClient().prepareSearch("test-index")
.setQuery(QueryBuilders.matchAllQuery())
.setTimeout(TimeValue.timeValueMillis(1))
.execute().actionGet();
由于nodeEsTemplate的类型为ElasticsearchIndexTemplate,并假定您在存储库类中创建了自定义的findAllWithTimeOut方法。