Solr之客户端SolrJ
来源:互联网 发布:软件著作权转让税率 编辑:程序博客网 时间:2024/05/02 06:53
SolrJ是操作Solr的JAVA客户端,它提供了增加、修改、删除、查询Solr索引的JAVA接口。SolrJ针对Solr提供了Rest的HTTP接口进行了封装,SolrJ底层是通过使用httpClient中的方法来完成Solr的操作。SolrJ通常向后保持兼容性,可以使用新版本的SolrJ访问较旧的Solr,反之亦然。建议使用同Solr server同版本的SolrJ。
引入依赖包:
<dependency><groupId>org.apache.solr</groupId><artifactId>solr-solrj</artifactId><version>5.2.1</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.7</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>1.7.7</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency>一、普通方式
1.增加、删除索引
package cn.slimsmart.solr.demo.solrj;import java.util.ArrayList;import java.util.Collection;import java.util.List;import org.apache.solr.client.solrj.impl.HttpSolrClient;// 采用SolrInputDocument对象增加、删除索引public class Test {static String URL = "http://192.168.18.119:9080/solr/test";public static void main(String[] args) {addDocs();//delDocs();}public static void addDocs() {long start = System.currentTimeMillis();Collection<Student> docs = new ArrayList<Student>();for (int i = 1; i < 50; i++) {Student s = new Student();//各属性的名称在conf/schema.xml中存在s.setId("efgh00"+i);s.setName("li si" + i);s.setAge(3 * i);s.setDesc(i+"今天天气很好");docs.add(s);}try {HttpSolrClient client = new HttpSolrClient(URL);client.addBeans(docs);client.optimize();client.commit();client.close();} catch (Exception e) {System.out.println(e);}System.out.println("cost time:" + (System.currentTimeMillis() - start));}public static void delDocs() {long start = System.currentTimeMillis();try {HttpSolrClient client = new HttpSolrClient(URL);List<String> ids = new ArrayList<String>();for (int i = 1; i < 10; i++) {ids.add("efgh00" + i);}client.deleteById(ids);client.commit();client.close();} catch (Exception e) {System.out.println(e);}System.out.println("cost time:" + (System.currentTimeMillis() - start));}}2.处理查询
package cn.slimsmart.solr.demo.solrj;import java.io.IOException;import org.apache.solr.client.solrj.SolrQuery;import org.apache.solr.client.solrj.SolrQuery.ORDER;import org.apache.solr.client.solrj.SolrServerException;import org.apache.solr.client.solrj.impl.BinaryRequestWriter;import org.apache.solr.client.solrj.impl.HttpSolrClient;import org.apache.solr.client.solrj.impl.XMLResponseParser;import org.apache.solr.client.solrj.response.QueryResponse;import org.apache.solr.common.SolrDocument;//普通方式处理查询结果public class QueryDocsTest {static String URL = "http://192.168.18.119:9080/solr/test";public static void main(String[] args) throws SolrServerException, IOException {HttpSolrClient client = new HttpSolrClient(URL);client.setConnectionTimeout(5000); //正常情况下,以下参数无须设置 //使用老版本solrj操作新版本的solr时,因为两个版本的javabin incompatible,所以需要设置Parserclient.setParser(new XMLResponseParser());client.setSoTimeout(1000); // socket read timeoutclient.setDefaultMaxConnectionsPerHost(100);client.setMaxTotalConnections(100);client.setFollowRedirects(false); // defaults to false // allowCompression defaults to false. // Server side must support gzip or deflate for this to have any effect.client.setAllowCompression(true);//使用ModifiableSolrParams传递参数/* ModifiableSolrParams params = new ModifiableSolrParams(); // http://192.168.18.119:9080/solr/test/select?q=context%3A%E4%BB%8A%E5%A4%A9&wt=json&indent=true // 设置参数,实现上面URL中的参数配置 // 查询关键词 params.set("q", "context:今天"); // 返回信息 params.set("fl", "id,name,age,desc"); // 排序 params.set("sort", "id asc"); // 分页,start=0就是从0开始,rows=5当前返回5条记录,第二页就是变化start这个值为5就可以了 params.set("start", 0); params.set("rows", 5); // 返回格式 params.set("wt", "javabin"); QueryResponse response = client.query(params);*/ //使用SolrQuery传递参数,SolrQuery的封装性更好client.setRequestWriter(new BinaryRequestWriter()); SolrQuery query = new SolrQuery(); query.setQuery("context:今天"); query.setFields("id","name","age","desc"); query.setSort("id", ORDER.asc); query.setStart(0); query.setRows(2);// query.setRequestHandler("/select"); QueryResponse response = client.query(query); // 搜索得到的结果数 System.out.println("Find:" + response.getResults().getNumFound()); // 输出结果 int iRow = 1; for (SolrDocument doc : response.getResults()) { System.out.println("----------" + iRow + "------------"); System.out.println("id: " + doc.getFieldValue("id").toString()); System.out.println("name: " + doc.getFieldValue("name").toString()); System.out.println("age: "+ doc.getFieldValue("age").toString()); System.out.println("desc: " + doc.getFieldValue("desc")); iRow++; } client.close();}}二、java对象方式
创建java对象
package cn.slimsmart.solr.demo.solrj;import org.apache.solr.client.solrj.beans.Field;public class Student {@Fieldprivate String id;@Fieldprivate String name;@Fieldprivate int age;@Fieldprivate String desc;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 int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}}1.增加、删除索引
package cn.slimsmart.solr.demo.solrj;import java.util.ArrayList;import java.util.Collection;import java.util.List;import org.apache.solr.client.solrj.impl.HttpSolrClient;import org.apache.solr.common.SolrInputDocument;// 采用POJOs增加、删除索引public class Test1 {static String URL = "http://192.168.18.119:9080/solr/test";public static void main(String[] args) {addDocs();delDocs();}public static void addDocs() {long start = System.currentTimeMillis();Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();for (int i = 1; i < 50; i++) {SolrInputDocument doc1 = new SolrInputDocument();//各属性的名称在conf/schema.xml中存在doc1.addField("id", "abcd00" + i, 1.0f);doc1.addField("name", "zhan shan" + i, 1.0f);doc1.addField("age", 2 * i);doc1.addField("desc", "Apache Devicemap is a data repository containing devices attributes " + i);docs.add(doc1);}try {HttpSolrClient client = new HttpSolrClient(URL);client.add(docs.iterator());client.commit();client.close();} catch (Exception e) {System.out.println(e);}System.out.println("cost time:" + (System.currentTimeMillis() - start));}public static void delDocs() {long start = System.currentTimeMillis();try {HttpSolrClient client = new HttpSolrClient(URL);List<String> ids = new ArrayList<String>();for (int i = 1; i < 10; i++) {ids.add("abcd00" + i);}client.deleteById(ids);client.commit();client.close();} catch (Exception e) {System.out.println(e);}System.out.println("cost time:" + (System.currentTimeMillis() - start));}}2.处理查询
package cn.slimsmart.solr.demo.solrj;import java.io.IOException;import java.util.List;import org.apache.solr.client.solrj.SolrQuery;import org.apache.solr.client.solrj.SolrServerException;import org.apache.solr.client.solrj.beans.DocumentObjectBinder;import org.apache.solr.client.solrj.impl.HttpSolrClient;import org.apache.solr.client.solrj.impl.XMLResponseParser;import org.apache.solr.client.solrj.response.QueryResponse;import org.apache.solr.common.SolrDocument;import org.apache.solr.common.SolrDocumentList;//采用POJOs方式处理查询结果public class QueryDocsTest1 {static String URL = "http://192.168.18.119:9080/solr/test";public static void main(String[] args) throws SolrServerException, IOException {HttpSolrClient client = new HttpSolrClient(URL);client.setConnectionTimeout(5000); //正常情况下,以下参数无须设置 //使用老版本solrj操作新版本的solr时,因为两个版本的javabin incompatible,所以需要设置Parserclient.setParser(new XMLResponseParser());client.setSoTimeout(1000); // socket read timeoutclient.setDefaultMaxConnectionsPerHost(100);client.setMaxTotalConnections(100);client.setFollowRedirects(false); // defaults to false // allowCompression defaults to false. // Server side must support gzip or deflate for this to have any effect.client.setAllowCompression(true);SolrQuery query = new SolrQuery(); query.setQuery("context:今天"); query.setStart(0); query.setRows(2); QueryResponse response = client.query(query); // 搜索得到的结果数 System.out.println("Find:" + response.getResults().getNumFound()); // 输出结果 int iRow = 1; SolrDocumentList list = response.getResults(); DocumentObjectBinder binder = new DocumentObjectBinder(); List<Student> beanList=binder.getBeans(Student.class, list); for(Student s:beanList){ System.out.println(s.getId()); } for (SolrDocument doc : response.getResults()) { System.out.println("----------" + iRow + "------------"); System.out.println("id: " + doc.getFieldValue("id").toString()); System.out.println("name: " + doc.getFieldValue("name").toString()); iRow++; } client.close();}}
另外,除了使用java客户端外,我们可以通过http请求管理索引,例如:
Solr 删除全部索引:http://localhost:8080/solr/update/?stream.body=<delete><query>*:*</query></delete>&stream.contentType=text/xml;charset=utf-8&commit=true
solr 删除指定ID的索引:http://localhost:8080/solr/update/?stream.body=<delete><id>1</id></delete>&stream.contentType=text/xml;charset=utf-8&commit=true
参考管理页面:http://192.168.18.119:9080/solr/admin.html#/test/documents
参考文章:
1.官方文档
2.Solr JAVA客户端SolrJ 4.9使用示例教程
3.Solr分页查询代码,包含查询,分页,高亮及获取高亮处摘要代码
0 0
- Solr之客户端SolrJ
- 全文搜索服务器solr之客户端 - solrj二次开发
- 全文搜索服务器solr之客户端 - solrj二次开发
- 全文搜索服务器solr之客户端 - solrj二次开发
- solr的客户端调用solrj
- Solr Java客户端(SolrJ)
- 【Apache Solr系列之三】Solr客户端SolrJ API使用文档-增删改
- 【Apache Solr系列之四】Solr客户端SolrJ API使用文档-查询实例
- 【Apache Solr系列之五】使用Solr客户端SolrJ实现多层面统计
- solr/solrj之原子更新
- solrj之solr基本应用!
- 全文索引----solr客户端工具solrJ
- Solr客户端 SolrJ单机 添加查询操作
- SolrJ是操作Solr的JAVA客户端
- Solr JAVA客户端SolrJ的使用
- solr学习笔记 -- day03 使用solrJ客户端
- Solr java客户端solrJ的CRUD操作
- Solr学习(三) 牛刀小试之SolrJ
- 安卓笔记
- 生产管理系统定制开发的项目流程
- 安卓词典
- 第8课 LCD控制驱动
- 路由子系统——Scope
- Solr之客户端SolrJ
- PHP 500 -Invalid command RewriteEngine的解决 wamp问题1
- ajax之“解读原生态ajax”
- 3个人工资水平
- JSP学习笔记1(声明,输出表达式,脚本,page,include,forward,usebean,setproperty,getproperty)
- Solr之关系型数据库导入数据
- wamp问题2 不能用任务栏wamp的工具生成alias
- window.showModalDialog以及window.open用法简介
- 安卓作业—词典