【问题标题】:Annotation Query and return only specific nested field with spring data elasticsearch使用spring data elasticsearch注释查询并仅返回特定的嵌套字段
【发布时间】:2019-12-05 07:35:54
【问题描述】:

使用spring data elasticsearch注解查询并只返回特定的嵌套字段

版本

springboot:2.1.7.RELEASE

spring-data-elasticsearch: 2.1.7.RELEASE

弹性搜索:6.5.4


文档:

@Data
@Document(indexName = "test_book", type = "test_book")
public class Book {
    @Id
    private String id;

    private String name;

    private LocalDateTime time;
    /**
     *
     */
    private Publishing publishing;

    /**
     * 
     */
    private Author author;
}

仓库:

public interface BookRepository extends ElasticsearchRepository<Book,String> {

    @Query("{" +
            "\"_source\": {" +
            "   \"includes\": " +
            "       [ \"name\"]" +
            "}," +
            "\"bool\" : {" +
            "   \"must\" : [{" +
            "       \"term\" : {" +
            "           \"id.keyword\" : \"?0\"" +
            "           }" +
            "       }]" +
            "   }" +
            "}")
    Book queryBookNameById(String id);
}

我只是想获取name的数据,可以相对节省内存资源。但是我有一个错误,我不能这样使用它吗?还是只能使用elasticsearchTemplate?

ParsingException[no [query] registered for [_source]
]
    at org.elasticsearch.index.query.AbstractQueryBuilder.parseInnerQueryBuilder(AbstractQueryBuilder.java:332)
    at org.elasticsearch.index.query.WrapperQueryBuilder.doRewrite(WrapperQueryBuilder.java:165)
    at org.elasticsearch.index.query.AbstractQueryBuilder.rewrite(AbstractQueryBuilder.java:279)
    at org.elasticsearch.search.builder.SearchSourceBuilder.rewrite(SearchSourceBuilder.java:921)
    at org.elasticsearch.search.builder.SearchSourceBuilder.rewrite(SearchSourceBuilder.java:80)
    at org.elasticsearch.index.query.Rewriteable.rewriteAndFetch(Rewriteable.java:97)
    at org.elasticsearch.index.query.Rewriteable.rewriteAndFetch(Rewriteable.java:87)
    at org.elasticsearch.action.search.TransportSearchAction.doExecute(TransportSearchAction.java:215)
    at org.elasticsearch.action.search.TransportSearchAction.doExecute(TransportSearchAction.java:68)
    at org.elasticsearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:167)
    at org.elasticsearch.xpack.security.action.filter.SecurityActionFilter.apply(SecurityActionFilter.java:126)
......

【问题讨论】:

    标签: spring-boot elasticsearch spring-data-elasticsearch


    【解决方案1】:

    这目前不适用于存储库的 @Query 注释。 Spring Data Elasticsearch 会将注解的值包装为 query 值,因此将 _source 部分包含到查询中。

    我们需要向注解(includesexcludes)添加额外的参数,以便能够构建正确的查询并使其工作。我将为此创建一个 Jira 问题以跟踪此功能请求。

    Jira issue

    【讨论】:

    • 这个功能比较有用
    猜你喜欢
    • 1970-01-01
    • 2021-11-10
    • 2021-07-13
    • 2017-12-03
    • 2016-03-28
    • 2015-11-13
    • 1970-01-01
    • 2015-10-02
    • 1970-01-01
    相关资源
    最近更新 更多