Solr学习(三)-Java项目封装SolrJ

Solr学习(三)-Java项目封装SolrJ

    上一章介绍了Java项目对SolrJ的简单运用,本章主要记录java封装SolrJ。

目录结构介绍

具体步骤

--》创建Java项目

--》添加依赖

    <dependency>
      <groupId>org.apache.solr</groupId>
      <artifactId>solr-solrj</artifactId>
      <version>5.5.4</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.25</version>
    </dependency>
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.2</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.32</version>
    </dependency>

--》根据user core的solr_home/user/conf/schema.xml文件中配置的field属性创建对象属性(注:这里只需要作为返回信息的field用于查询的field不需要创建属性)

public class User {
    @Field("userId")
    private Integer userId;

    @Field("userName")
    private String userName;

    @Field("userAccount")
    private String userAccount;

    ...
    getter and setter
    ...

}

--》创建通过的返回数据对象Dto.java

public class Dto<T> {
    private String success; //判断系统是否出错做出相应的true或者false的返回,与业务无关,出现的各种异常
    private String errorCode;//该错误码为自定义,一般0表示无错
    private String msg;//对应的提示信息
    private T data;//具体返回数据内容(pojo、自定义VO、其他)

    public T getData() {
        return data;
    }
    public void setData(T data) {
        this.data = data;
    }
    public String getSuccess() {
        return success;
    }
    public void setSuccess(String success) {
        this.success = success;
    }
    public String getErrorCode() {
        return errorCode;
    }
    public void setErrorCode(String errorCode) {
        this.errorCode = errorCode;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
}

--》封装Solr为BaseDao.java

public class BaseDao<T> {

    private static BaseDao baseDao;
    private HttpSolrClient httpSolrClient = null; // 定义客户端句柄
    private QueryResponse queryResponse = null; // 定义接受句柄

    private BaseDao(){}

    public static BaseDao getInstance(){
        if(baseDao == null){
            baseDao = new BaseDao();
        }
        return baseDao;
    }

    public void init(String url){
        // 初始化HttpSolrClient
        httpSolrClient = new HttpSolrClient(url);
        httpSolrClient.setParser(new XMLResponseParser()); // 设置响应解析器
        httpSolrClient.setConnectionTimeout(500);   // 设置建立连接的最长时间
    }

    /**
     * 定义查询的方法
     * @param solrQuery SolrQuery查询对象
     * @param clazz 返回对象class
     * @return 查询结果List
     */
    public List<T> query(SolrQuery solrQuery, Class clazz){
        if(httpSolrClient == null){
            System.out.println("请先初始化httpSolrClient");
            return null;
        }
        List<T> list = new ArrayList<>();
        try {
            queryResponse = httpSolrClient.query(solrQuery);
            list = queryResponse.getBeans(clazz);
        } catch (SolrServerException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            return list;
        }
    }

}

--》创建Service层

public interface UserService {
    Dto queryByUserName(String userName, int start, int rows);
}
public class UserServiceImpl implements UserService {

    private String url = "http://localhost:8080/solr/user";

    @Override
    public Dto queryByUserName(String userName, int start, int rows) {
        Dto dto = new Dto();
        BaseDao<User> baseDao = BaseDao.getInstance();
        baseDao.init(url);
        SolrQuery solrQuery = new SolrQuery("userName:北京人民大会堂"); // 创建并设置关键词过滤条件
        solrQuery.setSort("userId",SolrQuery.ORDER.desc);   // 设置排序
        solrQuery.setStart(start);  // 设置分页开始记录数
        solrQuery.setRows(rows);   // 设置查询条数
        List<User> userList = baseDao.query(solrQuery,User.class);
        if(userList != null && userList.size() > 0){
            dto.setSuccess("0000");
            dto.setMsg("success");
            dto.setData(userList);
        }else{
            dto.setErrorCode("10000");
            dto.setMsg("error");
        }
        return dto;
    }
}

--》创建测试方法

    public static void main( String[] args )
    {
        UserService userDao = new UserServiceImpl();
        Dto dto = userDao.queryByUserName("北京人民大会堂",0,10);
        System.out.println(JSON.toJSON(dto));
    }

--》测试。测试前先运行部署好的tomcat(详细见前两个章节)

--》完成

附件:

Solr学习(三)-Java项目封装SolrJ.zip 链接:https://pan.baidu.com/s/136EIb72x7g4ItkAKA8wdMA  提取码:ss6t 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丨Anna丨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值