Solr java客户端的操作

本文介绍如何使用SolrJ进行Solr服务器的操作,包括建立连接、添加文档、删除文档及查询等基本功能,并提供了详细的Java代码示例。

###环境搭建
第一步:创建一个java工程。
第二步:导入jar包。包括solrj的jar包

1、solr-solrj-4.10.3.jar
2、 solrj-lib文件夹下所有的jar包
3、 还需要\solr-4.10.3\example\lib\ext目录下的所有的jar包。

这里写图片描述
第三部:索引库使用的是 这篇文章的索引库

###实现步骤

第一步:使用Solrj中的SolrServer和服务端创建连接。单机使用HttpSolrServer,集群环境使用CloudSolrServer。
第二步:创建一个文档对象。SolrInputDocument对象。
第三步:向文档中添加域,直接调用addField方法添加,每个文档中必须 有一个id域,而且每个域的名称必须是在schema.xml中定义。
第四步:把文档对象添加到索引库中。
第五步:调用SolrServer对象的commit方法。

###代码实现

package com.sxt.solr;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrQuery.ORDER;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.junit.After;
import org.junit.Test;

/** 
* @author : szc
* @date 创建时间:2017年8月5日 下午9:17:27 
* @version 1.0 
* @parameter  
* @since  
* @return  
*/
public class SolrTest {

	//添加索引
	@Test
	public void testAdd() throws SolrServerException, IOException {
		//创建和solr服务器的连接
		String url="http://localhost:8080/solr";
		SolrServer solrServer=new HttpSolrServer(url);
		//创建一个文档对象
		SolrInputDocument document = new SolrInputDocument();
		document.addField("id","solr001");
		document.addField("product_name", "魅族手机");
		document.addField("product_price", 3000);
		solrServer.add(document);
		solrServer.commit();
	}
	//根据id删除
	@Test
	public void deleteDocumentById() throws Exception{
		//创建和solr服务器的连接
		String url="http://localhost:8080/solr/solrCore";
		SolrServer solrServer=new HttpSolrServer(url);
		solrServer.deleteById("solr001");
		//可以根据查询条件删除索引
		// solrServer.deleteByQuery("id:solr001");
		solrServer.commit();
	}
	//删除全部
	@Test
	public void deleteAll()throws Exception{
		//创建和solr服务器的连接
		String url="http://localhost:8080/solr/solrCore";
		SolrServer solrServer=new HttpSolrServer(url);
		solrServer.deleteByQuery("*:*");
		solrServer.commit();
	}
	//更新和添加一样 略
	@Test
	public void testSearch() throws Exception{
		//创建和solr服务器的连接
		String url="http://localhost:8080/solr";
		SolrServer solrServer=new HttpSolrServer(url);
		//创建查询对象 SolrQuery是SolrParams 的子类
		SolrQuery solrQuery = new SolrQuery();
		//solrQuery.set("q", "*:*");
		//solrQuery.setQuery("*:*");
		//设置默认搜索域
		solrQuery.set("df", "product_name");
		//设置查询条件
		solrQuery.setQuery("手机");
		//设置过滤条件
		solrQuery.addFilterQuery("product_price:[100 TO 6600]");
		//设置过滤条件,下面两种方式
		//query.addFilterQuery(“域名”,”条件”);
	   //query.setFilterQueries(“域名:条件”,”域名:条件”…);
		//设置排序条件
		solrQuery.setSort("product_price", ORDER.asc);
		//设置分页条件
		solrQuery.setStart(0);
		solrQuery.setRows(10);
		//设置显示的域
		solrQuery.setFields("id","product_name","product_price");
		solrQuery.setHighlight(true);
		solrQuery.addHighlightField("product_name");
		solrQuery.setHighlightSimplePre("<span style='color:red'>");
		solrQuery.setHighlightSimplePost("</span>");
		//执行查询
		QueryResponse queryResponse = solrServer.query(solrQuery);
		//取文档列表
		SolrDocumentList results = queryResponse.getResults();
		System.out.println("查询结果总量:"+results.getNumFound());
		//遍历查询结果
		for (SolrDocument solrDocument : results) {
			System.out.println(solrDocument.get("id"));
			System.out.println(solrDocument.get("product_name"));
			System.out.println(solrDocument.get("product_price"));
			System.out.println(solrDocument.get("product_catalog_name"));
			System.out.println(solrDocument.get("product_picture"));
			//key 是 id
			Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
			//key 是 域名
			Map<String, List<String>> map = highlighting.get(solrDocument.get("id"));
			List<String> list = map.get("product_name");
			System.out.println(list.get(0));
			System.out.println("--------------");
			
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值