如何在spring-data中使用@Query注解增大elasticsearch返回结果数量
Spring Data Elasticsearch 默认查询返回最多10条结果,要调整为返回100条可以用以下三种方案:
- 方案一:调用时传入分页参数(灵活调整返回数量)
修改接口定义,新增Pageable类型入参:
// 接口定义 @Query("{\"match\": {\"metaData.transcript1\": {\"query\": \"?0\",\"fuzziness\": \"AUTO\",\"prefix_length\": \"0\",\"max_expansions\": \"100\",\"boost\": \"1.0\"}}}") @Highlight(fields = {@HighlightField(name = "metaData.transcript1")}, parameters = @HighlightParameters( preTags = "<em>", postTags = "</em>", fragmentSize = 50, numberOfFragments = 3 )) List<SearchHit<Audio>> findByKeyword(String query, Pageable pageable);
调用时传入分页参数获取前100条:
// 调用示例 List<SearchHit<Audio>> result = audioRepository.findByKeyword("搜索关键词", PageRequest.of(0, 100));
- 方案二:固定接口默认返回数量
用@PageableDefault注解指定默认分页大小,调用时不传分页参数就默认返回100条:
@Query("{\"match\": {\"metaData.transcript1\": {\"query\": \"?0\",\"fuzziness\": \"AUTO\",\"prefix_length\": \"0\",\"max_expansions\": \"100\",\"boost\": \"1.0\"}}}") @Highlight(fields = {@HighlightField(name = "metaData.transcript1")}, parameters = @HighlightParameters( preTags = "<em>", postTags = "</em>", fragmentSize = 50, numberOfFragments = 3 )) List<SearchHit<Audio>> findByKeyword(String query, @PageableDefault(size = 100) Pageable pageable);
- 方案三:直接限制接口最大返回条数
不需要分页逻辑的场景可以直接加@Limit注解固定返回最多100条,不需要额外入参:
@Query("{\"match\": {\"metaData.transcript1\": {\"query\": \"?0\",\"fuzziness\": \"AUTO\",\"prefix_length\": \"0\",\"max_expansions\": \"100\",\"boost\": \"1.0\"}}}") @Highlight(fields = {@HighlightField(name = "metaData.transcript1")}, parameters = @HighlightParameters( preTags = "<em>", postTags = "</em>", fragmentSize = 50, numberOfFragments = 3 )) @Limit(size = 100) List<SearchHit<Audio>> findByKeyword(String query);
另外注意你原代码中@HighlightParameters里fragmentSize = 50后面缺失逗号,会导致编译报错,上述示例代码已经补全。
内容的提问来源于stack exchange,提问作者Ajay Rajpurohit
相关产品推荐
相关产品推荐

