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

使用spring-boot-starter-data-elasticsearch查询Elasticsearch报错解析

报错原因及解决方案:unknown query [query] in StringQuery

错误原因

StringQuery的构造参数仅接受单个查询对象的JSON内容,对应Elasticsearch搜索请求中query字段的值,而非完整的搜索请求体。你传入的JSON包含了顶层的"query"键,这会让Elasticsearch尝试将整个结构解析为一个查询类型,但"query"并不是Elasticsearch支持的查询类型,因此抛出parsing_exception。

修正后的代码

移除外层的"query"包裹,只保留query_string查询的JSON部分:

@GetMapping("/search")
public void searchResume(@RequestParam(name = "search") String query) {
    Query q = new StringQuery("""
            {
              "query_string": {
                "query": "my search input"
              }
            }
            """);
    System.out.println(operations.search(q, Resume.class));
}

如果需要动态替换搜索关键词,可将请求参数嵌入JSON(注意:若query包含特殊字符需做转义,避免JSON语法错误):

@GetMapping("/search")
public void searchResume(@RequestParam(name = "search") String query) {
    String queryJson = String.format("""
            {
              "query_string": {
                "query": "%s"
              }
            }""", query);
    Query q = new StringQuery(queryJson);
    System.out.println(operations.search(q, Resume.class));
}

更推荐的写法:类型安全API

使用Elasticsearch客户端提供的类型安全API构建查询,避免JSON字符串的语法错误:

@GetMapping("/search")
public void searchResume(@RequestParam(name = "search") String query) {
    Query q = Query.of(builder -> builder
            .queryString(qsBuilder -> qsBuilder.query(query)));
    System.out.println(operations.search(q, Resume.class));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 10:29:53