solrJ项目开发的示例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
solrJ操作类 SolrService
package com.youxuepai.res.assistant.service.solr; import com.youxuepai.res.assistant.dto.solr.BasicQueryParamDTO; import java.io.IOException; import java.util.List; import java.util.Map; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrInputDocument; /** * Interface SolrService ... solr操作教辅资源 * * @author gaobo * @group * @date 2019/8/22 */ public interface SolrService { /** * solr添加List对象列表 */ <T> void saveOrUpdate(List<T> beans, SolrClient client); /** * solr添加Obj对象 */ <T> void saveOrUpdate(T beans, SolrClient client); /** * 原子更新solr * 只根据ID更新部分字段 * @param bean * @param client * @param <T> */ <T> void atmoUpdate(T bean, SolrClient client); /** * solr根据Id删除对象索引 * @param id * @return */ boolean deleteById(String id,SolrClient client); /** * 转换javabean对象为查询params. * * @param bean 添加入solr的实体类 */ <T> SolrQuery ConvertQueryParam(T bean); <T> SolrInputDocument beanToSolrMap(T bean); /** * 查询solr数据 * * @param client solr实例 * @param queryParam 过滤参数bean * @param bean 基础查询信息bean */ <T> QueryResponse queryByBean( SolrClient client, BasicQueryParamDTO queryParam, T bean) throws IOException, SolrServerException; /** * 查询solr数据 * * @param client solr实例 * @param queryParam 过滤参数bean */ <T> QueryResponse queryByBean( SolrClient client, BasicQueryParamDTO queryParam ) throws IOException, SolrServerException; /** * 查询solr数据 * * @param client solr实例 * @param bean 基础查询信息bean */ <T> QueryResponse queryByBean( SolrClient client, T bean) throws IOException, SolrServerException; }
solrJ操作类 SolrServiceImpl
package com.youxuepai.res.assistant.service.solr.impl; import com.youxuepai.res.assistant.dto.solr.BasicQueryParamDTO; import com.youxuepai.res.assistant.service.solr.SolrService; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrQuery.ORDER; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.beans.DocumentObjectBinder; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrInputDocument; import org.apache.solr.common.SolrInputField; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; /** * 类 SolrServiceImpl 公共添加solr方法 * * @author gaobo * @group * @date 2019/8/22 */ @Service public class SolrServiceImpl implements SolrService { Logger logger = LoggerFactory.getLogger(SolrServiceImpl.class); DocumentObjectBinder binder = new DocumentObjectBinder(); /** * solr添加对象列表 */ @Override public <T> void saveOrUpdate(List<T> beans, SolrClient client) { for (T bean : beans) { saveOrUpdate(bean, client); } try { client.commit(); } catch (SolrServerException | IOException e) { logger.error("保存文档出错," + beans.size(), e); throw new RuntimeException(e.getMessage()); } } @Override public <T> void saveOrUpdate(T beans, SolrClient client) { SolrInputDocument doc = binder.toSolrInputDocument(beans); try { client.add(doc); client.commit(); } catch (Exception e) { logger.error("保存文档出错," + doc.toString(), e); throw new RuntimeException(e.getMessage()); } } final String PRIMARY_KEY = "assistantResourceId"; /** * 原子更新solr * 只根据ID更新部分字段 * @param bean * @param client * @param <T> */ @Override public <T> void atmoUpdate(T bean, SolrClient client) { SolrInputDocument doc = beanToSolrMap(bean); try { client.add(doc); client.commit(); } catch (Exception e) { logger.error("保存文档出错," + doc.toString(), e); throw new RuntimeException(e.getMessage()); } } /** * solr根据Id删除对象索引 * @param id * @return */ @Override public boolean deleteById(String id,SolrClient client) { try { client.deleteById(id); client.commit(); } catch (Exception e) { e.printStackTrace(); return false; } return true; } /** * 转换javabean对象为查询params. * * @param bean 添加入solr的实体类 */ @Override public <T> SolrQuery ConvertQueryParam(T bean) { Map<String, Object> paramMap = beanToMap(bean); // 添加默认参数 SolrQuery solrQuery = new SolrQuery(); paramMap.entrySet().forEach( filterMap -> solrQuery.addFilterQuery(filterMap.getKey() + ":" + filterMap.getValue()) ); return solrQuery; } private <T> Map<String, Object> beanToMap(T bean){ SolrInputDocument doc = binder.toSolrInputDocument(bean); Collection<SolrInputField> values = doc.values(); return values.stream() .filter(entity -> entity.getValue() != null && !entity.getValue().equals("")) .collect(Collectors.toMap(map -> map.getName(), map -> map.getValue())); } @Override public <T> SolrInputDocument beanToSolrMap(T bean) { Map<String, Object> paramMap = beanToMap(bean); SolrInputDocument inputDoc = new SolrInputDocument(); for (String field : paramMap.keySet()) { Map<String, Object> fieldMap = new HashMap<>(16); if (field.equals(PRIMARY_KEY)) { inputDoc.setField(PRIMARY_KEY, paramMap.get(field)); } else { fieldMap.put("set", paramMap.get(field)); inputDoc.setField(field, fieldMap); } } return inputDoc; } /** * 查询solr数据 * @param client solr实例 * @param queryParam 过滤参数bean * @param bean 基础查询信息bean * @param <T> * @return * @throws IOException * @throws SolrServerException */ @Override public <T> QueryResponse queryByBean(SolrClient client, BasicQueryParamDTO queryParam, T bean) throws IOException, SolrServerException { SolrQuery solrQuery = new SolrQuery(); if (bean != null) { solrQuery = this.ConvertQueryParam(bean); } solrQuery.set("q", "*:*"); if (queryParam != null) { boolean isKeywords = queryParam.getKeywords() != null; boolean isPage = queryParam.getPageNo() != null && queryParam.getPageSize() != null; boolean isRank = queryParam.getRankParm()!=null; // 搜索关键字是否有值 if (isKeywords) { solrQuery.remove("q"); solrQuery.set("q", "content:" + "*" + queryParam.getKeywords() + "*"); } //是否分页 if (isPage) { solrQuery.setStart((queryParam.getPageNo() - 1) * queryParam.getPageSize()); solrQuery.setRows(queryParam.getPageSize()); } //是否排序 if (isRank) { if (queryParam.getRankType() != null && queryParam.getRankType() == 1) { solrQuery.addSort(queryParam.getRankParm(), SolrQuery.ORDER.desc); } else if (queryParam.getRankType() != null && queryParam.getRankType() == 2) { solrQuery.addSort(queryParam.getRankParm(), ORDER.asc); } else { solrQuery.addSort(queryParam.getRankParm(), SolrQuery.ORDER.desc); } } } QueryResponse response = client.query(solrQuery); return response; } /** * 查询solr数据 * @param client solr实例 * @param queryParam 过滤参数bean * @param <T> * @return * @throws IOException * @throws SolrServerException */ @Override public <T> QueryResponse queryByBean(SolrClient client, BasicQueryParamDTO queryParam) throws IOException, SolrServerException { return this.queryByBean(client, queryParam,null); } /** * 查询solr数据 * @param client solr实例 * @param bean 基础查询信息bean * @param <T> * @return * @throws IOException * @throws SolrServerException */ @Override public <T> QueryResponse queryByBean(SolrClient client, T bean) throws IOException, SolrServerException { return this.queryByBean(client, null, bean); } }
solrClient 对象获取 SolrClientService
package com.youxuepai.res.assistant.service.solr; import org.apache.solr.client.solrj.SolrClient; /** * Interface SolrClientService ... * 获取solr实例 * @group * @author gaobo * @date 2019/9/5 */ public interface SolrClientService { /** * 获取教辅资源solr核心client * @return SolrClient */ SolrClient getAssResourceSolrClient(); }
solrClient 对象获取 SolrClientServiceImpl
package com.youxuepai.res.assistant.service.solr.impl; import com.youxuepai.res.assistant.common.solr.SolrHandler; import com.youxuepai.res.assistant.service.solr.SolrClientService; import org.apache.solr.client.solrj.SolrClient; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; /** * 类 SolrClientServiceImpl * 获取solr实例Service * @group * @author gaobo * @date 2019/8/23 */ @Service public class SolrClientServiceImpl implements SolrClientService { @Value("${solr.host}") private String solrHost; @Value("${solr.assistantResourceCoreName}") private String assResourceCoreName; /** * 获取教辅资源solr核心client * @return SolrClient */ @Override public SolrClient getAssResourceSolrClient() { String solrUrl = solrHost + assResourceCoreName; SolrHandler instance = SolrHandler.getInstance(solrUrl); return instance.getClient(); } }
solr操作dto AssistantResource
package com.youxuepai.res.assistant.entity; import com.baomidou.mybatisplus.annotation.TableId; import java.io.Serializable; import java.util.Date; import org.apache.solr.client.solrj.beans.Field; /** * <p> * 教辅资源 主表 * </p> * * @author ${author} * @since 2019-08-12 */ public class AssistantResource implements Serializable { private static final long serialVersionUID = 1L; @TableId @Field("assistantResourceId") private String assistantResourceId; /** * 关联的教辅ID,在教材知识体系中 */ @Field("assistantId") private Integer assistantId; /** * 教辅名称,来自教材知识体系中 */ @Field("assistantName") private String assistantName; /** * 教辅资源名称,由系统生成 */ private String resourceName; /** * ISBN 格式如 978-7-107-18617-5 */ @Field("isbn") private String isbn; /** * 教辅项目编码 */ @Field("projectCode") private String projectCode; /** * 教辅品牌ID */ @Field("assistantBrandId") private Integer brandId; /** * 学段ID */ @Field("periodId") private Integer periodId; /** * 科目ID */ @Field("subjectId") private Integer subjectId; /** * 版本ID */ @Field("editionId") private Integer editionId; /** * 学制ID */ @Field("eduSystem") private Integer eduSystem; /** * 封面图url */ @Field("coverUrl") private String coverUrl; /** * 教辅简介 */ @Field("introduce") private String introduce; /** * 必选修 */ @Field("volumneId") private Integer volumneId; /** * 关联教材目录数量 */ @Field("chaptersNum") private String chaptersNum; /** * 年级ID */ @Field("gradeId") private Integer gradeId; /** * 是否删除 0-未删除,1-已删除 */ private Integer isDeleted; /** * 是否添加素材 0-未添加,1-已添加 */ @Field("materialStatus") private Integer materialStatus; /** * 素材上传的URL,基目录 */ private String materialUrl; /** * 发布状态 */ @Field("publishStatus") private Integer publishStatus; /** * 是否锁定目录,0-未锁定,1-锁定 */ private Integer lockStatus; /** * 是否导入源文件,0-未导入,1-已导入 */ @Field("importSourceStatus") private Integer importSourceStatus; /** * 是否导入资源zip包,0-未导入,1-已导入 */ @Field("importZipStatus") private Integer importZipStatus; /** * 是否生成资源zip包,0-未生成,1-已生成 */ @Field("generateZipStatus") private Integer generateZipStatus; @Field("created") private Date created; private String createdBy; @Field("updated") private Date updated; private String updatedBy; public String getAssistantResourceId() { return assistantResourceId; } public void setAssistantResourceId(String assistantResourceId) { this.assistantResourceId = assistantResourceId; } public Integer getAssistantId() { return assistantId; } public void setAssistantId(Integer assistantId) { this.assistantId = assistantId; } public String getAssistantName() { return assistantName; } public void setAssistantName(String assistantName) { this.assistantName = assistantName; } public String getResourceName() { return resourceName; } public void setResourceName(String resourceName) { this.resourceName = resourceName; } public String getIsbn() { return isbn; } public void setIsbn(String isbn) { this.isbn = isbn; } public String getProjectCode() { return projectCode; } public void setProjectCode(String projectCode) { this.projectCode = projectCode; } public Integer getBrandId() { return brandId; } public void setBrandId(Integer brandId) { this.brandId = brandId; } public Integer getPeriodId() { return periodId; } public void setPeriodId(Integer periodId) { this.periodId = periodId; } public Integer getSubjectId() { return subjectId; } public void setSubjectId(Integer subjectId) { this.subjectId = subjectId; } public Integer getEditionId() { return editionId; } public void setEditionId(Integer editionId) { this.editionId = editionId; } public Integer getEduSystem() { return eduSystem; } public void setEduSystem(Integer eduSystem) { this.eduSystem = eduSystem; } public String getCoverUrl() { return coverUrl; } public void setCoverUrl(String coverUrl) { this.coverUrl = coverUrl; } public String getIntroduce() { return introduce; } public void setIntroduce(String introduce) { this.introduce = introduce; } public Integer getVolumneId() { return volumneId; } public void setVolumneId(Integer volumneId) { this.volumneId = volumneId; } public String getChaptersNum() { return chaptersNum; } public void setChaptersNum(String chaptersNum) { this.chaptersNum = chaptersNum; } public Integer getGradeId() { return gradeId; } public void setGradeId(Integer gradeId) { this.gradeId = gradeId; } public Integer getIsDeleted() { return isDeleted; } public void setIsDeleted(Integer isDeleted) { this.isDeleted = isDeleted; } public Integer getMaterialStatus() { return materialStatus; } public void setMaterialStatus(Integer materialStatus) { this.materialStatus = materialStatus; } public String getMaterialUrl() { return materialUrl; } public void setMaterialUrl(String materialUrl) { this.materialUrl = materialUrl; } public Integer getPublishStatus() { return publishStatus; } public void setPublishStatus(Integer publishStatus) { this.publishStatus = publishStatus; } public Integer getLockStatus() { return lockStatus; } public void setLockStatus(Integer lockStatus) { this.lockStatus = lockStatus; } public Integer getImportSourceStatus() { return importSourceStatus; } public void setImportSourceStatus(Integer importSourceStatus) { this.importSourceStatus = importSourceStatus; } public Integer getImportZipStatus() { return importZipStatus; } public void setImportZipStatus(Integer importZipStatus) { this.importZipStatus = importZipStatus; } public Integer getGenerateZipStatus() { return generateZipStatus; } public void setGenerateZipStatus(Integer generateZipStatus) { this.generateZipStatus = generateZipStatus; } public Date getCreated() { return created; } public void setCreated(Date created) { this.created = created; } public String getCreatedBy() { return createdBy; } public void setCreatedBy(String createdBy) { this.createdBy = createdBy; } public Date getUpdated() { return updated; } public void setUpdated(Date updated) { this.updated = updated; } public String getUpdatedBy() { return updatedBy; } public void setUpdatedBy(String updatedBy) { this.updatedBy = updatedBy; } @Override public String toString() { return "AssistantResource{" + "assistantResourceId='" + assistantResourceId + '\'' + ", assistantId=" + assistantId + ", assistantName='" + assistantName + '\'' + ", resourceName='" + resourceName + '\'' + ", isbn='" + isbn + '\'' + ", projectCode='" + projectCode + '\'' + ", brandId=" + brandId + ", periodId=" + periodId + ", subjectId=" + subjectId + ", editionId=" + editionId + ", eduSystem=" + eduSystem + ", coverUrl='" + coverUrl + '\'' + ", introduce='" + introduce + '\'' + ", volumneId=" + volumneId + ", chaptersNum='" + chaptersNum + '\'' + ", gradeId=" + gradeId + ", isDeleted=" + isDeleted + ", materialStatus=" + materialStatus + ", materialUrl='" + materialUrl + '\'' + ", publishStatus=" + publishStatus + ", lockStatus=" + lockStatus + ", importSourceStatus=" + importSourceStatus + ", importZipStatus=" + importZipStatus + ", generateZipStatus=" + generateZipStatus + ", created=" + created + ", createdBy='" + createdBy + '\'' + ", updated=" + updated + ", updatedBy='" + updatedBy + '\'' + '}'; } }
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。