ITrip项目(6)SpringBoot整合开发Solr(测试)

445 阅读2分钟

(1)新建Springboot项目prjsolrdemo,在Dependencies中勾选Developer Tools里的Springboot DevTools、Web里的Spring Web、NoSQL里的SpringDataforApacheSolr\color{#008000}{Spring Data for Apache Solr} ->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下对应文件进行覆盖