Spring Boot中spring-data-elasticsearch 5.1.5如何设置ignore_unavailable参数
问题分析
你使用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
相关产品推荐
相关产品推荐

