(1)新建Springboot项目prjsolrdemo,在Dependencies中勾选Developer Tools里的Springboot DevTools、Web里的Spring Web、NoSQL里的 ->Finish
当pom.xml中出现
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-solr</artifactId>
</dependency>
说明引入solr组件库成功(可在创建springboot时选择nosql中的solr)
配置applicationcontext.properties
server.port=8099
spring.data.solr.host=http://localhost:8080/solr/hotel
(2)建立包结构,在po包编写Hotel实体类
Hotel.java
package com.solrdemo.po;
import ...
@SolrDocument(solrCoreName = "hotel")
public class Hotel implements Serializable {
@Field("id") //此处字段名要和solr_home/hotel/conf/schema.xml文件中字段保持一致
private Long id;
@Field("hotelName")
private List<String> hotelname;
@Field("address")
private List<String> address;
@Field("destination")
private List<String> destination;
@Field("keyword")
private List<String> keyword; //keyword多关键字检索,返回为List集合
public Hotel() {
}
***** getter & setter *****
}
(3)在biz包编写业务接口以及业务实现类
HotelBiz.java
package com.solrdemo.biz;
import ...
public interface HotelBiz {
public List<Hotel> queryPageAll(int page,int rows,String field,String parm);//页数、记录数、字段名、值
public List<Hotel> queryNoBeans();
}
HotelBizImp.java
package com.solrdemo.biz;
import ...
@Service
public class HotelBizImp implements HotelBiz {
@Autowired
private SolrClient solrClient;
public SolrClient getSolrClient() {
return solrClient;
}
public void setSolrClient(SolrClient solrClient) {
this.solrClient = solrClient;
}
@Override
public List<Hotel> queryPageAll(int page, int rows,String field, String parm) {
System.out.println("biz-->queryPageAll-->"+field+"--->"+parm);
//创建Solr的查询对象
SolrQuery solrQuery=new SolrQuery();
solrQuery.set("q", "*:*");
//获取指定字段值的数据
if(parm!=null&&!parm.trim().equals("")){
System.out.println(""+field+":"+parm+"");
solrQuery.set("q", ""+field+":"+parm+"" );
}
//设置过滤条件(类似于select xxx from 表 where address='东城区')
//solrQuery.set("fq","address:东城区");
//solrQuery.set("fq","or address:正义路");
//设置分页显示
solrQuery.setStart((page-1)*rows);//从第几条记录开始
solrQuery.setRows(rows);//每页显示的记录数
//设置排序
solrQuery.setSort("id", SolrQuery.ORDER.asc);//按照id升序排列
try {
//QueryResponse表示查询响应的结果集合
QueryResponse response=solrClient.query(solrQuery);//执行查询
List<Hotel> hotelList=response.getBeans(Hotel.class);
return hotelList;
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
public List<Hotel> queryNoBeans() {
return null;
}
}
(4)编写控制器类
HotelAction.java
package com.solrdemo.action;
import ...
@RestController
public class HotelAction {
@Autowired
private HotelBiz hotelBiz;
public HotelBiz getHotelBiz() {
return hotelBiz;
}
public void setHotelBiz(HotelBiz hotelBiz) {
this.hotelBiz = hotelBiz;
}
@RequestMapping(value = "queryPageAll.do")
public List<Hotel> queryPageAll(Integer page,Integer rows,String parme){
page=page==null?1:page;
rows=rows==null?5:rows;
List<Hotel> hotelList=hotelBiz.queryPageAll(page, rows, "destination", parme);
System.out.println("hotelList--->"+hotelList);
return hotelList;
}
}
(5)在启动类prjsolrdemoApplication里添加扫描注释
在官方文档中复制data-config.xml和schema.xml内容对solr_home下对应文件进行覆盖