千家信息网

solrJ项目开发的示例分析

发表于:2024-10-10 作者:千家信息网编辑
千家信息网最后更新 2024年10月10日,solrJ项目开发的示例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。solrJ操作类 SolrServicepac
千家信息网最后更新 2024年10月10日solrJ项目开发的示例分析

solrJ项目开发的示例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

  1. 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对象列表   */   void saveOrUpdate(List beans, SolrClient client);  /**   * solr添加Obj对象   */   void saveOrUpdate(T beans, SolrClient client);  /**   * 原子更新solr   * 只根据ID更新部分字段   * @param bean   * @param client   * @param    */   void atmoUpdate(T bean, SolrClient client);  /**   * solr根据Id删除对象索引   * @param id   * @return   */  boolean deleteById(String id,SolrClient client);  /**   * 转换javabean对象为查询params.   *   * @param bean 添加入solr的实体类   */   SolrQuery ConvertQueryParam(T bean);   SolrInputDocument beanToSolrMap(T bean);  /**   * 查询solr数据   *   * @param client solr实例   * @param queryParam 过滤参数bean   * @param bean 基础查询信息bean   */   QueryResponse queryByBean(      SolrClient client,      BasicQueryParamDTO queryParam,      T bean) throws IOException, SolrServerException;  /**   * 查询solr数据   *   * @param client solr实例   * @param queryParam 过滤参数bean   */   QueryResponse queryByBean(      SolrClient client,      BasicQueryParamDTO queryParam  ) throws IOException, SolrServerException;  /**   * 查询solr数据   *   * @param client solr实例   * @param bean 基础查询信息bean   */   QueryResponse queryByBean(      SolrClient client,      T bean) throws IOException, SolrServerException;}


  2. 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 */@Servicepublic class SolrServiceImpl implements SolrService {  Logger logger = LoggerFactory.getLogger(SolrServiceImpl.class);  DocumentObjectBinder binder = new DocumentObjectBinder();  /**   * solr添加对象列表   */  @Override  public  void saveOrUpdate(List 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  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    */  @Override  public  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  SolrQuery ConvertQueryParam(T bean) {    Map paramMap = beanToMap(bean);//    添加默认参数    SolrQuery solrQuery = new SolrQuery();    paramMap.entrySet().forEach(        filterMap -> solrQuery.addFilterQuery(filterMap.getKey() + ":" + filterMap.getValue())    );    return solrQuery;  }  private  Map beanToMap(T bean){    SolrInputDocument doc = binder.toSolrInputDocument(bean);    Collection 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  SolrInputDocument beanToSolrMap(T bean) {    Map paramMap = beanToMap(bean);    SolrInputDocument inputDoc = new SolrInputDocument();    for (String field : paramMap.keySet()) {      Map 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    * @return   * @throws IOException   * @throws SolrServerException   */  @Override  public  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    * @return   * @throws IOException   * @throws SolrServerException   */  @Override  public  QueryResponse queryByBean(SolrClient client, BasicQueryParamDTO queryParam)      throws IOException, SolrServerException {    return this.queryByBean(client, queryParam,null);  }  /**   * 查询solr数据   * @param client solr实例   * @param bean 基础查询信息bean   * @param    * @return   * @throws IOException   * @throws SolrServerException   */  @Override  public  QueryResponse queryByBean(SolrClient client, T bean)      throws IOException, SolrServerException {    return this.queryByBean(client, null, bean);  }}


  3. 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();}


  4. 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 */@Servicepublic 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();  }}


  5. 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;/** * 

    * 教辅资源 主表 *

    * * @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 + '\'' + '}'; }}

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

0