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 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章