使用ElaticSearch来完成高亮搜索

直接上代码没啥好说的 能看懂的就很简单真的没啥

private Page<CompanyBasicInfo> companyPage(NativeSearchQuery queryBuilder, Page<CompanyBasicInfo> page) {
    
    

        page = elasticsearchTemplate.
                queryForPage(queryBuilder, CompanyBasicInfo.class, new SearchResultMapper() {
    
    
                    @Override
                    @SuppressWarnings("unchecked")
                    public <T> AggregatedPage<T> mapResults(SearchResponse response, Class<T> clazz, Pageable pageable) {
    
    

                        SearchHits searchHits = response.getHits();
                        SearchHit[] hits = searchHits.getHits();
                        ArrayList<CompanyBasicInfo> products = new ArrayList<>();
                        for (SearchHit hit : hits) {
    
    
                            CompanyBasicInfo product = new CompanyBasicInfo();
                            //原始map
                            Map<String, Object> sourceAsMap = hit.getSourceAsMap();
                            //LOGO
                            product.setOrgLogo((String) sourceAsMap.get("orgLogo"));
                            product.setId((String) sourceAsMap.get("id"));
                            product.setEntName(sourceAsMap.get("entName").toString());  // 公司名称
                            product.setEnterpriseStatus(sourceAsMap.get("enterpriseStatus").toString());    // 经营状态
                            product.setCorporation(sourceAsMap.get("corporation").toString());  // 法定代表人
                            product.setRegCapital(sourceAsMap.get("regCapital").toString());    // 注册资本
                            product.setRegDate(sourceAsMap.get("regDate").toString());      // 企业成立日期
                            product.setEmail(sourceAsMap.get("email").toString());      // 邮箱
                            product.setTelphone((String) sourceAsMap.get("telphone"));   // 电话
                            product.setScore((String) sourceAsMap.get("score"));         // 评分
                            product.setAddress(sourceAsMap.get("address").toString());  // 地址
                            // 高亮字段

                            Map<String, HighlightField> highlightFields = hit.getHighlightFields();
                            if (highlightFields.get("entName") != null) {
    
    
                                String nameHighlight = highlightFields.get("entName").getFragments()[0].toString();
                                product.setEntName(nameHighlight);
                            }
                            products.add(product);
                        }
                        return new AggregatedPageImpl<T>((List<T>) products);
                    }
                });

        return page;
    }

猜你喜欢

转载自blog.csdn.net/qq_43565087/article/details/107606247