适用版本: 7.4-7.13
1. 错误异常的基本描述 #
Unexpected null response from test query 表示 Elasticsearch Transform 在执行测试查询验证时,收到了空的搜索响应。
从源码可见,这个异常在 Transform 配置验证路径中抛出,当测试查询返回 null 时触发。
典型报错 #
ElasticsearchStatusException: Unexpected null response from test query
2. 为什么会发生这个错误 #
- 集群不可用:执行测试查询时集群状态异常。
- 索引不存在:Transform 配置的源索引不存在。
- 网络超时:查询执行超时导致响应为空。
- 权限不足:Transform 服务账户没有足够的搜索权限。
3. 排查步骤 #
- 检查集群健康状态:
GET /_cluster/health - 验证源索引存在:
GET /_cat/indices/source-index* - 检查 Transform 权限:确认 Transform 服务账户权限。
- 查看节点日志:检查是否有超时或网络错误。
4. 修复建议 #
方案一:确保索引存在 #
如果源索引不存在,先创建或更正索引名称:
# 检查索引
GET /_cat/indices
# 创建 Transform 前确保索引存在
PUT /source-index
{
"mappings": {
"properties": {
"timestamp": { "type": "date" },
"value": { "type": "integer" }
}
}
}
方案二:检查集群状态 #
确保集群状态正常:
GET /_cluster/health?wait_for_status=yellow&timeout=30s
方案三:验证 Transform 配置 #
使用正确的索引和查询配置:
POST /_transform/_preview
{
"source": {
"index": "source-index",
"query": { "match_all": {} }
},
"dest": {
"index": "dest-index"
},
"pivot": {
"group_by": {
"date": { "date_histogram": { "field": "timestamp", "calendar_interval": "1d" } }
},
"aggregations": {
"avg_value": { "avg": { "field": "value" } }
}
}
}
5. 小结 #
Unexpected null response from test query 通常意味着 Transform 测试查询执行失败。排查时应优先检查集群状态和源索引可用性。
相关错误 #
- transform-exception-how-to-solve-this-elasticsearch-exception
- index-not-found-exception-how-to-solve-this-elasticsearch-exception
- cluster-block-exception-how-to-solve-this-elasticsearch-exception
附:日志上下文 #
public void validateQuery(Client client, SourceConfig sourceConfig, ActionListener listener) {
SearchRequest searchRequest = buildSearchRequest(sourceConfig, null, TEST_QUERY_PAGE_SIZE);
client.execute(SearchAction.INSTANCE, searchRequest, ActionListener.wrap(response -> {
if (response == null) {
listener.onFailure(
new ElasticsearchStatusException("Unexpected null response from test query", RestStatus.SERVICE_UNAVAILABLE)
);
return;
}
if (response.status() != RestStatus.OK) {
listener.onFailure(





