使用SolrJ来操作Solr的一些基本的知识(初识Solr,写的不对请指正)

1.先搭建Solr环境,这里网上有很多例子,此处不做说明(我参考的是这个博客:点击打开链接

2.Solr在Java项目中的使用:

(1)数据存到Solr服务器中,有2种方式:第一种是通过启动Solr之后的控制台界面上添加数据(注意添加数据的时候,field一定要和schema.xml配置文件中的有对应的,不然会报错,可以新增自己需要的field);第二种是通过代码的方式进行添加,代码如下:

public void addDoc() throws SolrServerException, IOException{
		HttpSolrClient solr = new HttpSolrClient(solrUrl + "my_core");
		//方式1
		SolrInputDocument doc = new SolrInputDocument();
		doc.addField("id", "7");
		doc.addField("name", "测试7");
		doc.addField("description", "丑测试男7");
		doc.addField("myField", "测试7");
		solr.add(doc);
		//方式2
		Collection<Person> beans = new ArrayList<Person>();
		Person p = new Person();
		p.setId("6");
		p.setDescription("哈哈哈");
		p.setName("你猜我叫什么");
		beans.add(p);
		solr.addBeans(beans);
		
		solr.commit();
		solr.close();
	}


(2)数据现在有了,就需要进行查询或者删除操作,代码如下:

public void querySolr() throws SolrServerException, IOException{
		HttpSolrClient solr = new HttpSolrClient(solrUrl + "my_core");
		SolrQuery sq = new SolrQuery();
		sq.set("q", "*:*");//查询所有
//		sq.set("q", "张三");//相关查询,比如某条数据某个字段含有周、星、驰三个字  将会查询出来
		sq.addFilterQuery("id:[0 TO 9]");//增加过滤查询条件,id为0-9
//		sq.addFilterQuery("description:演员");//增加布尔过滤条件,description字段中含有“演员”两字的数据
		sq.set("df", "name");//设置默认搜索域
		sq.setSort("id",SolrQuery.ORDER.asc);//参数sort,设置返回结果的排序规则
		sq.setStart(0);//设置分页参数,起始页
		sq.setRows(10);//每一页多少值
		sq.setHighlight(true);//参数hl,设置高亮
		sq.addHighlightField("name");//设置高亮的字段 
		sq.setHighlightSimplePre("<font color='red'>");//设置高亮的样式
		sq.setHighlightSimplePost("</font>");
		//获取查询结果
		QueryResponse qr = solr.query(sq);
		//两种结果获取:得到文档集合或者实体对象
		//查询得到文档的集合
		SolrDocumentList docList = qr.getResults();
		System.out.println("查询结果的总数量:" +docList.getNumFound());
		for (SolrDocument sd : docList) {
			System.out.println("id:" + sd.get("id") +",name:" +sd.get("name") + ",description:" + sd.get("description"));
		}
		
		//得到实体对象
		List<Person> list = qr.getBeans(Person.class);
		if(list != null && list.size() > 0) {
			for(Person per : list){
                System.out.println("id:"+per.getId()+"   name:"+per.getName()+"    description:"+per.getDescription());
            }
		}
	}

public void delDocById() throws SolrServerException, IOException {
		HttpSolrClient solr = new HttpSolrClient(solrUrl + "my_core");
		solr.deleteById("1");
		solr.commit();
		solr.close();
}

(3)在进行查询操作的时候,可以通过操作SolrQuery的对象来返回结果集,此时有两种写法,一种是通过该对象的getResults()方法返回SolrDocumentList,然后遍历,得到对应的信息,还有种是通过该对象的getBeans(xxx.class)方法来直接得到某个实体的集合,如果使用第二种方式,一定要主要在实体的属性字段上面添加@Field 这个注解,不然是得不到对应的信息的。当然,你也可以通过反射机制来写个工具方法,在方法里通过判断来获取对应的信息。

import org.apache.solr.client.solrj.beans.Field;

public class Person {

	@Field
	private String id;
	@Field
	private String name;
	@Field
	private String description;
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getDescription() {
		return description;
	}
	public void setDescription(String description) {
		this.description = description;
	}
	
}


如果有不正确的地方,欢迎批评指正,谢谢~


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值