回答此问题可获得+50声望奖励。赏金宽限期已经结束。菲尔班正在寻找一个标准答案:
嗨,我需要看看如何在ElasticSearch中搜索所有索引,并将它们绑定到不同的javapojo
首先很抱歉,如果有人问这个问题,我已经到处找了,没有结果。
基本上我有一个es示例,它有3个索引。索引的数据/Map是从我的javapojo生成的。现在我可以单独搜索每个索引并将其Map回给定的pojo/类。
然而,当我想一次搜索3个索引并将搜索结果Map到正确的pojo时,我完全不知所措。
例如,下面是我当前如何搜索Map到我拥有的userprofile对象的单个索引:
public Iterable<UserProfile> fetchUserSearchSuggestions(String query, Integer page, Integer size) {
PageRequest pageRequest = PageRequest.of(page, size);
QueryBuilder queryBuilder = QueryBuilders.boolQuery().should(new WildcardQueryBuilder("displayName", query + "*"))
.should(new WildcardQueryBuilder("name", query + "*"));
Query searchQuery = new NativeSearchQueryBuilder()
.withFilter(queryBuilder)
.withPageable(pageRequest)
.build();
SearchHits<UserProfile> searchSuggestions =
elasticsearchOperations.search(searchQuery,
UserProfile.class,
IndexCoordinates.of(elasticUserIndex));
List<UserProfile> suggestions = new ArrayList<>();
searchSuggestions.getSearchHits().forEach(searchHit -> {
suggestions.add(searchHit.getContent());
});
long totalCount = searchSuggestions.getTotalHits();
Page<UserProfile> resultPage = PageableExecutionUtils.getPage(
suggestions,
pageRequest,
() -> totalCount);
return resultPage;
}
我的问题是,如果我想一次搜索所有索引,比如通用搜索,并将用户结果Map到userprofile类,等等,对于我拥有的每个不同的对象,我该怎么做呢。
非常感谢您的阅读
1条答案
按热度按时间eyh26e7m1#
你知道多重搜索的要求吗?
假设我们有这样一个结构的类请求:
索引-elasticsearch索引
我们正在寻找的领域
值-字段值
跨多个索引的搜索如下所示
我不知道我的解决方案是否有用,但是
--升级版--
在我最喜欢的项目中,我就是这样
在你之前的情况下
OBJECT_MAPPER.readValue
必须检查找到的对象类型,或使用try-catch块写入return,如下所示: