solrJ项目开发的示例分析

发布时间:2021-09-10 17:50:57 作者:柒染
来源:亿速云 阅读:119

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对象列表
       */
      <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;
    }


  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
     */
    @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);
      }
    }


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


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

     

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

推荐阅读:
  1. 基于springboot的Maven项目开发步骤(2)
  2. dubbo项目开发实战

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

solrj

上一篇:java中Spring相关知识点有哪些

下一篇:怎么通过重启路由的方法切换IP地址

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》