您的位置:首页 > 编程语言 > Java开发

solr<二> Java 操作 solr CURD

2017-06-06 22:46 295 查看
一般来说 操作solr 有两种方式,一:是 http rest 方式,二:Java 操作 solrj ,这里我们都是通过Java的 作为solr 的客户端去操作;
创建索引
第一种添加方式,通过添加Field创建索引文档
使用addField添加索引域,然后通过add(document)添加索引文档
package com._656464.solr.test;
import java.io.IOException;
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.common.SolrInputDocument;
import org.junit.Before;
import org.junit.Test;
/**
* 使用solrj 来调用solr 的服务
*/
public class SolrTest {
SolrServer solr = null;
@Before
public void init(){
String urlString = "http://localhost:8983/solr";
solr = new HttpSolrServer(urlString);
}
@Test
public void addIndex() throws SolrServerException, IOException{
SolrInputDocument document=new SolrInputDocument();
//第一种添加方式,通过添加Field创建索引文档
document.addField("id", "1");
document.addField("name", "领悟书生");
solr.add(document);
solr.commit();
}
}
第二种添加方式,通过添加bean创建索引文档
创建一个实体,实体的属性使用 Field注解

package com._656464.solr.test;
import org.apache.solr.client.solrj.beans.Field;
public class TestObj {
@Field(value = "id")
private int id;
@Field(value = "name")
private String name;
@Field(value = "content")
private String content;
@Field(value = "price")
private double price;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}

对bean初始化并赋值后,使用solr的addBean方法把该对象添加到索引中
//第二种添加方式,通过添加bean创建索引文档
TestObj obj=new TestObj();
obj.setId(2);
obj.setName("领悟书生");
obj.setContent("书生在学solr");
obj.setPrice(1024);
solr.addBean(obj);
solr.commit();

第三种:批量 添加(docs/beans)
//第三种添加方式,通过添加bean列表创建多个索引文档
List<TestObj> list=new ArrayList<TestObj>();
TestObj obj=null;
for(int i=1;i<=25;i++){
obj=new TestObj();
obj.setId(i);
obj.setName("领悟书生"+i);
obj.setContent("书生在学solr"+i);
obj.setPrice(1024);
list.add(obj);
}
solr.addBeans(list);
solr.commit();

删除索引
删除比较简单,直接调用SolrServer 的deleteById即可

@Test
public void delete() throws SolrServerException, IOException {
String urlString = "http://localhost:8983/solr";
SolrServer solr = new HttpSolrServer(urlString);
solr.deleteById("1");
solr.commit();
}

更新索引
更新索引和创建索引一样,只要ID一样,则覆盖

查询文档
使用SolrQuery 构造查询参数,然后通过solr的query方法返回QueryResponse 查询返回对象,然后获取queryResponse的结果集,最后遍历结果集即可

public void testFind() throws SolrServerException {
// 以后参数都是通过这个对象去构造...
SolrQuery solrParams = new SolrQuery();
solrParams.setQuery("name:书生");
QueryResponse queryResponse = solr.query(solrParams);
// 返回结果,默认只返回10条记录
SolrDocumentList documentList = queryResponse.getResults();
for (SolrDocument solrDocument : documentList) {
Object id = solrDocument.get("id");
Object name = solrDocument.get("name");
System.out.println(id);
System.out.println(name);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  solr