[JAVA]elasticsearch 在查询的时候返回指定的字段值

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

方法一

在spring-data-elasticsearch,即springboot自带支持的es组件中

可以这样使用,同时可以进行高亮设置等,其他功能可以自行尝试更多的with语句。

BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
        boolQuery.must(QueryBuilders.multiMatchQuery(q, "title", "content"));
        PageRequest pageRequest = PageRequest.of(page - 1, pagesize);
        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(boolQuery)
                .withSourceFilter(new SourceFilter() {
                    @Override
                    public String[] getIncludes() {
                        return new String[]{"title","date","author"};
                    }

                    @Override
                    public String[] getExcludes() {
                        return new String[]{"content"};
                    }
                })
                .withIndices("file_index")
                .withTypes("file")
                .withHighlightFields(
                        new HighlightBuilder.Field("title").preTags("<span style=\"color:red\">").postTags("</span>"),
                        new HighlightBuilder.Field("content").preTags("<span style=\"color:red\">").postTags("</span>"))
                .withPageable(pageRequest)
                .build();

//然后使用elasticsearchTemplate进行查询即可

方法二

BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();

queryBuilder.should(
    QueryBuilders.boolQuery()
        .must(QueryBuilders.matchQuery("dimension", RecommendStrategyDimension.Customize.getValue()))
        .must(QueryBuilders.matchQuery("userCodes", userCode))
);

queryBuilder.should(
    QueryBuilders.boolQuery()
        .must(QueryBuilders.matchQuery("dimension", RecommendStrategyDimension.UserSource.getValue()))
        .must(QueryBuilders.matchQuery("userSource", userSource))
);

BoolQueryBuilder filterBuilder = QueryBuilders.boolQuery();
filterBuilder.must(QueryBuilders.matchQuery("appId", appId));
filterBuilder.must(QueryBuilders.matchQuery("module", module));

SearchQuery searchQuery = new NativeSearchQueryBuilder()
    .withFilter(filterBuilder)
    .withQuery(queryBuilder)
    .withPageable(PageRequest.of(0, 1, Sort.by("createTime").descending()))
    .withFields("id", "novelIds", "position")
    .build();

Page<RecommendStrategyEo> page = this.recommendStrategyRepository.search(searchQuery);
posted @   未月廿三  阅读(1535)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示