spring-boot - 使用spring data elasticsearch注释查询并仅返回特定的嵌套字段
问题描述
使用spring data elasticsearch注释查询并仅返回特定的嵌套字段
版本:</p>
springboot:2.1.7.RELEASE
弹簧数据弹性搜索:2.1.7.RELEASE
弹性搜索:6.5.4
文件:</p>
@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;
}
仓库:</p>
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)
......
解决方案
这目前不适@Query
用于存储库的注释。Spring Data Elasticsearch 将注释的值包装为查询值,因此将_source
部分包含到查询中。
我们需要向注解 (includes
和excludes
) 添加额外的参数,以便能够构建正确的查询并使其工作。我将为此创建一个 Jira 问题以跟踪此功能请求。
推荐阅读
- spring - Spring Webflux - 延迟初始化的内存缓存
- numpy - AttributeError:“元组”对象没有“扁平化”属性
- amazon-web-services - awscli DescribeUserPoolClient 几乎没有返回任何内容,尽管它应该返回所有 appClient 设置的文档
- google-api - 如何准确地从 Eircode/邮政编码获取地理位置
- r - 在向量上使用表格时,名称中的数字是乱序的
- python - 如何在 Kivy、Kivy Lang、Kivy MD 中使用 ID 引用小部件内部的小部件
- reactjs - 不支持的 Safari React 应用程序
- r - 通过分组和定义应保留的值来汇总所有行
- python - 当我尝试为 dlib 构建轮子时,它说我需要 cmake 才能这样做。但我已经安装了 Cmake
- java - Spring 如何在配置 bean 上应用代理?