使用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
本文链接:https://www.cnblogs.com/zhangsan-plus/p/16503302.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步