springBoot+elasticSearch 实现多索引综合检索

1.环境:elasticsearch-7.3.2 、springBoot 2.2.0.RELEASE

es相关依赖

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

检索测试方法:

@Override
    public void improveSearch(String text) {

        // 搜索请求对象
        SearchRequest searchRequest = new SearchRequest(BwbdType.ES_INDEX,"testdoct");
        // 指定类型
        searchRequest.types(BwbdType.ES_TYPE,"testbean");
        // 搜索源构建对象
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        // 搜索方式
        // 首先构造多关键字查询条件
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();

        // 初始聚合查询
        MultiMatchQueryBuilder matchQueryBuilder = QueryBuilders
                .multiMatchQuery(text, BwbdType.PROPERTY_NUMBERS
                        , BwbdType.PROPERTY_TITLES, BwbdType.PROPERTY_CONTENTS).analyzer("ik_smart")
                .field("name", 1f)
                .field(BwbdType.PROPERTY_NUMBERS, 0.1f)
                .field(BwbdType.PROPERTY_TITLES, 0.1f)
                .field(BwbdType.PROPERTY_CONTENTS, 0.001f)
                .minimumShouldMatch(BwbdType.MATCH_LEVEL_THREE);
        // 添加条件到布尔查询
        boolQueryBuilder.must(matchQueryBuilder);


        // 将查询条件封装给查询对象
        searchSourceBuilder.query(boolQueryBuilder);

        searchSourceBuilder.size(20);
        searchSourceBuilder.from(1);

        // ***********************

        // 高亮查询
        HighlightBuilder highlightBuilder = new HighlightBuilder();
        highlightBuilder.preTags(CommonConstraint.LIGHT_TAG_START); // 高亮前缀
        highlightBuilder.postTags(CommonConstraint.LIGHT_TAG_END); // 高亮后缀
        List<HighlightBuilder.Field> fields = highlightBuilder.fields();
        fields.add(new HighlightBuilder
                .Field(BwbdType.PROPERTY_NUMBERS)); // 高亮字段
        fields.add(new HighlightBuilder
                .Field(BwbdType.PROPERTY_TITLES)); // 高亮字段
        fields.add(new HighlightBuilder
                .Field(BwbdType.PROPERTY_CONTENTS).fragmentSize(100000)); // 高亮字段
        // 添加高亮查询条件到搜索源
        searchSourceBuilder.highlighter(highlightBuilder);

        // ***********************

        // 向搜索请求对象中设置搜索源
        searchRequest.source(searchSourceBuilder);
        // 执行搜索,向ES发起http请求
        SearchResponse searchResponse = null;
        try (RestHighLevelClient client = new RestHighLevelClient(restClientBuilder)) {
            searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
            int i = 1;
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

搜索结果:

 

posted @ 2020-08-06 17:33  官萧何  阅读(3960)  评论(0编辑  收藏  举报