【发布时间】:2016-05-17 02:00:03
【问题描述】:
我正在使用 spring-data-elasticsearch 为一个项目提供全文搜索功能。我们将真实数据保存在关系数据库和相关元数据中,以及弹性搜索中的相应 ID。所以对于搜索结果,只需要 id 字段,因为实际数据将从关系数据库中检索。
我正在根据搜索条件构建搜索查询,然后执行 queryForIds():
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withIndices(indexName)
.withTypes(typeName)
.withQuery(getQueryBuilder(searchParams))
.withPageable(pageable)
.build();
return elasticsearchTemplate.queryForIds(searchQuery);
如果我还需要该特定 searchQuery 的总数,我可以再进行一次elasticsearchTemplate.count(searchQuery) 调用,但据我所知,这将是多余的。我认为有一种方法可以通过在一次调用中使用 elasticsearchTemplate.queryForPage() 之类的东西来获取 id 列表和总数。
另外,我可以在queryForPage(SearchQuery query, Class<T> clazz, SearchResultMapper mapper) 中使用未使用@Document 注释的自定义类吗?实际的文档类非常大,如果我不确定传递大型类是否会导致引擎上的任何额外负载,因为有超过 100 个字段要进行 json 映射,但我只需要 id 字段。无论如何,我将在查询生成器中有一个.withFields("id")。
【问题讨论】:
-
简单删除问题后,编辑如何获得批准?我理解从描述中删除多余的文本(尽管不确定“提前致谢”会如何伤害这个堆栈溢出社区。我正在重新编辑我的问题标题,因为该部分的编辑很愚蠢,它删除了重要信息问题。人们几乎不会对阅读该死的“计数和ID”感兴趣。
标签: java elasticsearch spring-data spring-data-elasticsearch