Solr学习笔记(四)----使用solrJ操作

版权声明:转载请标明出处~~ https://blog.csdn.net/weixin_43231076/article/details/83150933

solrJ是solr官方类库,实现原理就是使用http请求和响应,只是进行了一层封装,不需要写请求的url等参数。
使用solrJ操作solr索引库的一些方法:
1、向solr索引库添加文档

@Test
public void testAddDocument() throws Exception{
	//1.创建一个SolrServer对象,这是一个抽象类,通过它的子类创建对象,需要传递参数:solr服务的地址
	//地址如果是http://192.168.25.131:8081/solr,那么默认连接的是collection1
	SolrServer solrServer = new HttpSolrServer("http://192.168.25.131:8081/solr/collection1");
	
	//2.创建一个文档对象SolrInputDocument
	SolrInputDocument document = new SolrInputDocument();
	
	//3.像文档中添加域,而且必须要添加一个id域,并且所有的域名要在solr服务的schema.xml中定义过
	//id,item_title,item_price就是域名,需要在schema.xml中定义
	document.addField("id", "doc01");
	document.addField("item_title", "测试商品");
	document.addField("item_price", 1000);
	
	//4.把文档写如solr索引库
	solrServer.add(document);
	
	//5.提交文档
	solrServer.commit();
}

2、从solr索引库中通过id域删除文档

@Test
public void deleteDocument() throws Exception{
	//1.创建一个SolrServer对象,这是一个抽象类,通过它的子类创建对象,需要传递参数:solr服务的地址
	//地址如果是http://192.168.25.131:8081/solr,那么默认连接的是collection1
	SolrServer solrServer = new HttpSolrServer("http://192.168.25.131:8081/solr/collection1");
		
	//根据文档id删除 -- a
	solrServer.deleteById("doc01");
	//根据查询来删除 -- b  a和b方式都能删除文档
	//solrServer.deleteByQuery("id:doc01");
	
	//提交
	solrServer.commit();
}

3、从solr库中删除数据–简单查询

@Test
public void queryList() throws Exception{
	//1.创建一个SolrServer对象,这是一个抽象类,通过它的子类创建对象,需要传递参数:solr服务的地址
	//地址如果是http://192.168.25.131:8081/solr,那么默认连接的是collection1
	SolrServer solrServer = new HttpSolrServer("http://192.168.25.131:8081/solr/collection1");
		
	//2.创建一个SolrQuery对象
	SolrQuery solrQuery = new SolrQuery();
	
	//3.设置查询条件
	//solrQuery.setQuery("*:*");		//查询全部
	solrQuery.set("q", "*:*");			//查询全部
	solrQuery.setStart(0);			//设置从第几条开始查,不设置的话,默认是0
	solrQuery.setRows(10);			//设置查询几条数据,不设置的话,默认是10
	
	//4.执行查询,返回QueryResponse对象
	QueryResponse queryResponse = solrServer.query(solrQuery);
	
	//5.从QueryResponse对象中获取文档列表,也能获取查询的总记录数
	SolrDocumentList documentList = queryResponse.getResults();
	System.out.println("总记录数: "+ documentList.getNumFound());
	
	//6.遍历文档列表,取出域的内容
	for (SolrDocument solrDocument : documentList) {
		System.out.println(solrDocument.get("id"));
		System.out.println(solrDocument.get("item_title"));
		System.out.println(solrDocument.get("item_sell_point"));
		System.out.println(solrDocument.get("item_price"));
		System.out.println(solrDocument.get("item_image"));
		System.out.println(solrDocument.get("item_category_name"));
	}
}

4、从solr索引库中查询数据–复杂查询

@Test
public void queryListFuza() throws Exception{
	//1.创建一个SolrServer对象,这是一个抽象类,通过它的子类创建对象,需要传递参数:solr服务的地址
	//地址如果是http://192.168.25.131:8081/solr,那么默认连接的是collection1
	SolrServer solrServer = new HttpSolrServer("http://192.168.25.131:8081/solr/collection1");
		
	//2.创建一个SolrQuery对象
	SolrQuery solrQuery = new SolrQuery();
	
	//3.设置查询条件
	solrQuery.setQuery("手机");		//设置查询关键字
	solrQuery.setStart(0);			//设置从第几条开始查,不设置的话,默认是0
	solrQuery.setRows(20);			//设置查询几条数据,不设置的话,默认是10
	solrQuery.set("df", "item_title");		//设置默认的搜索域,如果不设置的话,默认是在text域里面
	solrQuery.setHighlight(true);		//设置高亮显示,表示在页面上的样式特别突出,比如说搜索苹果手机,在页面上苹果手机这个四个字就变颜色
	solrQuery.addHighlightField("item_title");		//设置高亮显示的域
	solrQuery.setHighlightSimplePre("<em>");
	solrQuery.setHighlightSimplePost("</em>");		//高亮显示的前缀和后缀,就是改变样式
	
	//4.执行查询,返回QueryResponse对象
	QueryResponse queryResponse = solrServer.query(solrQuery);
	
	//5.从QueryResponse对象中获取文档列表,也能获取查询的总记录数
	SolrDocumentList documentList = queryResponse.getResults();
	System.out.println("总记录数: "+ documentList.getNumFound());
	
	//取高亮显示的内容
	Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
	
	//6.遍历文档列表,取出域的内容
	for (SolrDocument solrDocument : documentList) {
		System.out.println(solrDocument.get("id"));
		
		//取高亮显示的结果
		String title = "";
		List<String> list = highlighting.get(solrDocument.get("id")).get("item_title");
		if(list != null && list.size() > 0){
			title =  list.get(0);
		}else{
			title = (String) solrDocument.get("item_title");
		}
		System.out.println("高亮显示: " + title);
		System.out.println(solrDocument.get("item_sell_point"));
		System.out.println(solrDocument.get("item_price"));
		System.out.println(solrDocument.get("item_image"));
		System.out.println(solrDocument.get("item_category_name"));
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_43231076/article/details/83150933