You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中spring-data-elasticsearch 5.1.5如何设置ignore_unavailable参数

在Spring Boot + spring-data-elasticsearch 5.1.5中设置ignore_unavailable=true

问题分析

你使用NativeQueryBuilder的withIndicesOptions(IndicesOptions.LENIENT_EXPAND_OPEN)未生效,原因是spring-data-elasticsearch 5.x版本基于Elasticsearch官方Java Client,IndicesOptions枚举值并未完全映射ignore_unavailable这类URL参数,需要手动指定请求参数来实现需求。

解决方案

方案1:通过NativeQueryBuilder添加请求参数

直接在构建NativeQuery时,用withRequestOptions方法追加所需的URL参数:

NativeQuery nativeQuery = new NativeQueryBuilder()
    .withQuery(query) // 你的QueryBuilder构建的查询
    .withPageable(pageable)
    .withRequestOptions(options -> options
        .addParameters("ignore_unavailable", "true")
        .addParameters("expand_wildcards", "open")
        .addParameters("allow_no_indices", "true")
        .addParameters("max_concurrent_shard_requests", "5")
        .addParameters("typed_keys", "true")
    )
    .build();

// 执行查询
SearchHits<YourEntity> hits = elasticsearchOperations.search(nativeQuery, YourEntity.class);

方案2:直接使用ElasticsearchClient构造请求

绕开spring-data的封装,直接用底层Elasticsearch官方Client构建SearchRequest,精准控制所有参数:

// 构造SearchRequest并设置所有参数
SearchRequest searchRequest = new SearchRequest.Builder()
    .index("test_statements-2021-06-21", "test_statements-2021-06-14", "test_statements-2021-06-07") // 按需添加所有目标索引
    .query(query.build()) // 你的QueryBuilder构建的查询
    .ignoreUnavailable(true)
    .expandWildcards(ExpandWildcard.Open)
    .allowNoIndices(true)
    .maxConcurrentShardRequests(5)
    .typedKeys(true)
    .build();

// 执行查询
SearchResponse<YourEntity> response = elasticsearchClient.search(searchRequest, YourEntity.class);

两种方式都能生成你期望的包含ignore_unavailable=true参数的请求。

内容的提问来源于stack exchange,提问作者user3445852

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 01:43:30