当前位置: 首页 > 知识库问答 >
问题:

注释使用Spring数据elasticsearch查询并仅返回特定的嵌套字段

云景焕
2023-03-14

注释使用Spring数据elasticsearch查询并仅返回特定的嵌套字段

版本:

springboot:2.1.7。释放

spring数据弹性搜索:2.1.7。释放

elasticsearch: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);
}

我只想得到名字的数据,这样可以相对节省内存资源。但我犯了个错误,不能这样使用吗?或者只能使用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)
......

共有1个答案

杜阳炎
2023-03-14

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

我们需要在注释中添加额外的参数包含排除)才能构建正确的查询并使其工作。我将为此创建一个Jira问题以跟踪此功能请求。

吉拉问题

 类似资料:
  • 是否可以使用spring data elasticsearch返回所有elasticsearch文档的特定嵌套字段? 例如。es数据存储库将如何查找以下查询? 网址: /myIndex/MyType/_search 查询正文:

  • 我有以下POJO 在下面的类中,我想直接检索给定人员的嵌套字段“cars”,其名称作为参数传递,但它返回一个具有null值的列表。 但是,如果在上面的searchHits代码中,我将类更改为Person,如下所示,我将返回pojo Person,其中只填写属性“cars”(所有其他属性检索为null): 但是如何直接检索嵌套的属性车?

  • 问题内容: 我有以下查询: 这将同时返回“匹配”对象(整个文档)和“ inner_hits”对象(嵌套在匹配内部)。 有没有办法让我只返回出现在“ inner_hits”结果中的匹配“查询”元素,而没有获取整个文档? 问题答案: 应该可以通过以下方式 在顶层 禁用source- field 来实现

  • 我是Elasticsearch的新手,我提出了一个问题,Elasticsearch嵌套查询是否只能为嵌套字段返回匹配的嵌套文档。 对于示例,我有一个名为的类型,其中嵌套字段名为 和嵌套查询 我需要的是搜索有提到足球的评论的博客文章,每个博客文章的评论数与足球相匹配(在例子中它数为1,因为另一个评论刚刚提到篮球)。 然而,Elasticsearch似乎总是返回完整的文档,所以我如何才能实现它,或者我

  • 我正在通过jHipster使用Spring Data Elasticsearch支持,并试图更多地了解如何使用搜索来扩展数据库中的一些新关系。 我有了一个新的嵌套关系,它有自己的索引: 我想将结果筛选到特定用户“friend1.id”,并在嵌套文档上搜索匹配的详细信息? 但这似乎没有返回任何结果?

  • 我正在努力学习GraphQL( 我只得到一级字段,比如: 以下是我的模式: 我的解析器: 知道我做错了什么吗?