如何为弹簧数据弹性搜索查询定义查询超时?

时间:2019-01-15 15:07:47

标签: spring spring-data spring-data-elasticsearch

我的问题更笼统地说,假设我有一个像这样的简单查询即可弹性搜索

Page<MyEntity> findAll(Pageable pageable);

例如,我希望能够为此查询设置超时,以使其不会永远挂起,尽管我阅读了文档,但对如何执行此操作并不清楚。

有什么办法吗?一种为Spring-data-elasticsearch查询设置超时的方法,我可以确保什么都不会太久?

1 个答案:

答案 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方法。