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