首页 > 解决方案 > 为什么要使用@Query(“”)来操作Elasticsearch并报错(org.elasticsearch.common.ParsingException: no [query] registered for [query])

问题描述

我的代码

package com.tl666.elasticsearch.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.elasticsearch.annotations.Document;

import java.util.Date;

@Data
@Document(indexName = "blog", type = "blogtext")
@NoArgsConstructor
@AllArgsConstructor
public class Blog {
    private Integer id;
    private String title;//标题
    private String text;//文本内容
    private String[] images;
    private Person person;
    private Date create_time;
}

操作 Elasticsearch

package com.tl666.elasticsearch.repository;

import com.tl666.elasticsearch.pojo.Blog;
import org.springframework.data.elasticsearch.annotations.Query;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

public interface BlogRepository extends ElasticsearchRepository<Blog, Integer> {
    @Query("{ \"query\": { \"match\": { \"title\": \"?0\" }}}")
    Blog findByName(String title);
}

发生以下异常

org.elasticsearch.common.ParsingException: no [query] registered for [query]
    at org.elasticsearch.index.query.AbstractQueryBuilder.parseInnerQueryBuilder(AbstractQueryBuilder.java:337) ~[elasticsearch-6.8.4.jar:6.8.4]
    at org.elasticsearch.index.query.WrapperQueryBuilder.doRewrite(WrapperQueryBuilder.java:165) ~[elasticsearch-6.8.4.jar:6.8.4]
    at org.elasticsearch.index.query.AbstractQueryBuilder.rewrite(AbstractQueryBuilder.java:284) ~[elasticsearch-6.8.4.jar:6.8.4]
    at org.elasticsearch.search.builder.SearchSourceBuilder.rewrite(SearchSourceBuilder.java:949) ~[elasticsearch-6.8.4.jar:6.8.4]
    at org.elasticsearch.search.builder.SearchSourceBuilder.rewrite(SearchSourceBuilder.java:80) ~[elasticsearch-6.8.4.jar:6.8.4]

我是按照官方文档操作的,但是出现了上述异常。

谁来帮助我?非常感谢。

标签: javaspringelasticsearchspring-data-elasticsearch

解决方案


Val 向您展示了正确的查询,但您不需要自定义查询,您可以通过定义在 title 属性中进行搜索:

public interface BlogRepository extends ElasticsearchRepository<Blog, Integer> 
{
     Blog findByTitle(String title);
}

推荐阅读