Solr JAVA客户端SolrJ 4.9使用示例教程
http://my.oschina.net/cloudcoder/blog/305024
简介
SolrJ是操作Solr的JAVA客户端,它提供了增加、修改、删除、查询Solr索引的JAVA接口。SolrJ针对 Solr提供了Rest 的HTTP接口进行了封装, SolrJ底层是通过使用httpClient中的方法来完成Solr的操作。
SolrJ/Solr 跨版本兼容性
SolrJ通常向后保持兼容性,可以使用新版本的SolrJ访问较旧的Solr,反之亦然。建议使用同Solr server同版本的SolrJ,
详见 http://wiki.apache.org/solr/Solrj 中关于兼容性的描述。
示例代码
- 采用 SolrInputDocument对象 增加、删除索引
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.List;
- import org.apache.solr.client.solrj.impl.HttpSolrServer;
- import org.apache.solr.common.SolrInputDocument;
- public class AddDocsDemo {
- public static final String SOLR_URL = "http://172.168.63.233:8983/solr";
- public static void main(String[] args) {
- //通过浏览器查看结果
- //http://172.168.63.233:8983/solr/collection1/select?q=name%3A%E6%94%B9%E9%9D%A9&wt=json&indent=true
- //AddDocs();
- delDocs();
- }
- public static void AddDocs() {
- String[] words = { "中央全面深化改革领导小组", "第四次会议", "审议了国企薪酬制度改革", "考试招生制度改革",
- "传统媒体与新媒体融合等", "相关内容文件", "强调要", "逐步规范国有企业收入分配秩序",
- "实现薪酬水平适当", "结构合理、管理规范、监督有效", "对不合理的偏高", "过高收入进行调整",
- "深化考试招生制度改革", "总的目标是形成分类考试", "综合评价", "多元录取的考试招生模式", "健全促进公平",
- "科学选才", "监督有力的体制机制", "着力打造一批形态多样", "手段先进", "具有竞争力的新型主流媒体",
- "建成几家拥有强大实力和传播力", "公信力", "影响力的新型媒体集团" };
- long start = System.currentTimeMillis();
- Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
- for (int i = 1; i < 300; i++) {
- SolrInputDocument doc1 = new SolrInputDocument();
- doc1.addField("id", "id" + i, 1.0f);
- doc1.addField("name", words[i % 21], 1.0f);
- doc1.addField("price", 10 * i);
- docs.add(doc1);
- }
- try {
- HttpSolrServer server = new HttpSolrServer(SOLR_URL);
- // 可以通过三种方式增加docs,其中server.add(docs.iterator())效率最高
- // 增加后通过执行commit函数commit (936ms)
- // server.add(docs);
- // server.commit();
- // 增加doc后立即commit (946ms)
- // UpdateRequest req = new UpdateRequest();
- // req.setAction(ACTION.COMMIT, false, false);
- // req.add(docs);
- // UpdateResponse rsp = req.process(server);
- // the most optimal way of updating all your docs
- // in one http request(432ms)
- server.add(docs.iterator());
- } catch (Exception e) {
- System.out.println(e);
- }
- System.out.println("time elapsed(ms):"
- + (System.currentTimeMillis() - start));
- }
- public static void delDocs() {
- long start = System.currentTimeMillis();
- try {
- HttpSolrServer server = new HttpSolrServer(SOLR_URL);
- List<String> ids = new ArrayList<String>();
- for (int i = 1; i < 300; i++) {
- ids.add("id" + i);
- }
- server.deleteById(ids);
- server.commit();
- } catch (Exception e) {
- System.out.println(e);
- }
- System.out.println("time elapsed(ms):"
- + (System.currentTimeMillis() - start));
- }
- }
- import java.util.ArrayList;
- 采用POJOs增加、删除索引
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Collection;
- import java.util.List;
- import java.util.Random;
- import org.apache.solr.client.solrj.beans.DocumentObjectBinder;
- import org.apache.solr.client.solrj.impl.BinaryRequestWriter;
- import org.apache.solr.client.solrj.impl.HttpSolrServer;
- import org.apache.solr.common.SolrInputDocument;
- public class AddBeansDemo {
- public static final String SOLR_URL = "http://172.168.63.233:8983/solr";
- public static void main(String[] args) {
- // 通过浏览器查看结果
- // 要保证bean中各属性的名称在conf/schema.xml中存在,如果查询,要保存被索引
- // http://172.168.63.233:8983/solr/collection1/select?q=description%3A%E6%94%B9%E9%9D%A9&wt=json&indent=true
- // delBeans();
- AddBeans();
- }
- public static Random rand = new Random(47);
- public static String[] authors = { "张三", "李四", "王五", "赵六", "张飞", "刘备",
- "关云长" };
- public static String[] links = {
- "http://repository.sonatype.org/content/sites/forge-sites/m2e/",
- "http://news.ifeng.com/a/20140818/41626965_0.shtml",
- "http://news.ifeng.com/a/20140819/41631363_0.shtml?wratingModule_1_9_1",
- "http://news.ifeng.com/topic/19382/",
- "http://news.ifeng.com/topic/19644/" };
- public static String genAuthors() {
- List<String> list = Arrays.asList(authors).subList(0, rand.nextInt(7));
- String str = "";
- for (String tmp : list) {
- str += " " + tmp;
- }
- return str;
- }
- public static List<String> genLinks() {
- return Arrays.asList(links).subList(0, rand.nextInt(5));
- }
- public static void AddBeans() {
- String[] words = { "中央全面深化改革领导小组", "第四次会议", "审议了国企薪酬制度改革", "考试招生制度改革",
- "传统媒体与新媒体融合等", "相关内容文件", "强调要", "逐步规范国有企业收入分配秩序",
- "实现薪酬水平适当", "结构合理、管理规范、监督有效", "对不合理的偏高", "过高收入进行调整",
- "深化考试招生制度改革", "总的目标是形成分类考试", "综合评价", "多元录取的考试招生模式", "健全促进公平",
- "科学选才", "监督有力的体制机制", "着力打造一批形态多样", "手段先进", "具有竞争力的新型主流媒体",
- "建成几家拥有强大实力和传播力", "公信力", "影响力的新型媒体集团" };
- long start = System.currentTimeMillis();
- Collection<NewsBean> docs = new ArrayList<NewsBean>();
- // DocumentObjectBinder binder = new DocumentObjectBinder();
- for (int i = 1; i < 300; i++) {
- NewsBean news = new NewsBean();
- news.setId("id" + i);
- news.setName("news" + i);
- news.setAuthor(genAuthors());
- news.setDescription(words[i % 21]);
- news.setRelatedLinks(genLinks());
- // SolrInputDocument doc1 = binder.toSolrInputDocument(news);
- docs.add(news);
- }
- try {
- HttpSolrServer server = new HttpSolrServer(SOLR_URL);
- server.setRequestWriter(new BinaryRequestWriter());
- // 可以通过二种方式增加docs,其中server.add(docs.iterator())效率最高
- // 增加后通过执行commit函数commit (981ms)
- // server.addBeans(docs);
- // server.commit();
- // the most optimal way of updating all your docs
- // in one http request(481ms)
- server.addBeans(docs.iterator());
- server.optimize(); //time elasped 1176ms
- } catch (Exception e) {
- System.out.println(e);
- }
- System.out.println("time elapsed(ms):"
- + (System.currentTimeMillis() - start));
- }
- public static void delBeans() {
- long start = System.currentTimeMillis();
- try {
- HttpSolrServer server = new HttpSolrServer(SOLR_URL);
- List<String> ids = new ArrayList<String>();
- for (int i = 1; i < 300; i++) {
- ids.add("id" + i);
- }
- server.deleteById(ids);
- server.commit();
- } catch (Exception e) {
- System.out.println(e);
- }
- System.out.println("time elapsed(ms):"
- + (System.currentTimeMillis() - start));
- }
- }
- import java.util.List;
- import org.apache.solr.client.solrj.beans.Field;
- class NewsBean {
- @Field
- private String id;
- @Field
- private String name;
- @Field
- private String author;
- @Field
- private String description;
- @Field("links")
- private List<String> relatedLinks;
- public NewsBean(){
- }
- 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 getAuthor() {
- return author;
- }
- public void setAuthor(String author) {
- this.author = author;
- }
- public String getDescription() {
- return description;
- }
- public void setDescription(String description) {
- this.description = description;
- }
- public List<String> getRelatedLinks() {
- return relatedLinks;
- }
- public void setRelatedLinks(List<String> relatedLinks) {
- this.relatedLinks = relatedLinks;
- }
- }
- import java.util.ArrayList;
- 普通方式处理查询结果
- 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.HttpSolrServer;
- import org.apache.solr.client.solrj.impl.XMLResponseParser;
- import org.apache.solr.client.solrj.response.QueryResponse;
- import org.apache.solr.common.SolrDocument;
- public class QueryDocsDemo {
- // public static final String SOLR_URL = "http://192.168.230.128:8983/solr";
- public static final String SOLR_URL = "http://172.168.63.233:8983/solr";
- public static void main(String[] args) throws SolrServerException, IOException {
- HttpSolrServer server = new HttpSolrServer(SOLR_URL);
- server.setMaxRetries(1);
- server.setMaxRetries(1); // defaults to 0. > 1 not recommended.
- server.setConnectionTimeout(5000); // 5 seconds to establish TCP
- //正常情况下,以下参数无须设置
- //使用老版本solrj操作新版本的solr时,因为两个版本的javabin incompatible,所以需要设置Parser
- server.setParser(new XMLResponseParser());
- server.setSoTimeout(1000); // socket read timeout
- server.setDefaultMaxConnectionsPerHost(100);
- server.setMaxTotalConnections(100);
- server.setFollowRedirects(false); // defaults to false
- // allowCompression defaults to false.
- // Server side must support gzip or deflate for this to have any effect.
- server.setAllowCompression(true);
- //使用ModifiableSolrParams传递参数
- // ModifiableSolrParams params = new ModifiableSolrParams();
- // // 192.168.230.128:8983/solr/select?q=video&fl=id,name,price&sort=price asc&start=0&rows=2&wt=json
- // // 设置参数,实现上面URL中的参数配置
- // // 查询关键词
- // params.set("q", "video");
- // // 返回信息
- // params.set("fl", "id,name,price,score");
- // // 排序
- // params.set("sort", "price asc");
- // // 分页,start=0就是从0开始,rows=5当前返回5条记录,第二页就是变化start这个值为5就可以了
- // params.set("start", 2);
- // params.set("rows", 2);
- // // 返回格式
- // params.set("wt", "javabin");
- // QueryResponse response = server.query(params);
- //使用SolrQuery传递参数,SolrQuery的封装性更好
- server.setRequestWriter(new BinaryRequestWriter());
- SolrQuery query = new SolrQuery();
- query.setQuery("video");
- query.setFields("id","name","price","score");
- query.setSort("price", ORDER.asc);
- query.setStart(0);
- query.setRows(2);
- // query.setRequestHandler("/select");
- QueryResponse response = server.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("price: "
- + doc.getFieldValue("price").toString());
- System.out.println("score: " + doc.getFieldValue("score"));
- iRow++;
- }
- }
- }
- 采用POJOs方式处理查询结果
- import java.io.IOException;
- import java.util.List;
- 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.beans.DocumentObjectBinder;
- import org.apache.solr.client.solrj.impl.HttpSolrServer;
- import org.apache.solr.client.solrj.response.FacetField;
- import org.apache.solr.client.solrj.response.QueryResponse;
- import org.apache.solr.common.SolrDocument;
- import org.apache.solr.common.SolrDocumentList;
- public class QueryBeanDemo {
- public static final String SOLR_URL = "http://172.168.63.233:8983/solr";
- public static void main(String[] args) throws SolrServerException,
- IOException {
- // http://172.168.63.233:8983/solr/collection1/select?q=description%3A%E6%80%BB%E7%9B%AE%E6%A0%87&facet=true&facet.field=author_s
- HttpSolrServer server = new HttpSolrServer(SOLR_URL);
- server.setMaxRetries(1);
- server.setMaxRetries(1); // defaults to 0. > 1 not recommended.
- server.setConnectionTimeout(5000); // 5 seconds to establish TCP
- // server.setRequestWriter(new BinaryRequestWriter());
- SolrQuery query = new SolrQuery();
- query.setQuery("description:改革");
- query.setStart(0);
- query.setRows(2);
- query.setFacet(true);
- query.addFacetField("author_s");
- QueryResponse response = server.query(query);
- // 搜索得到的结果数
- System.out.println("Find:" + response.getResults().getNumFound());
- // 输出结果
- int iRow = 1;
- //response.getBeans存在BUG,将DocumentObjectBinder引用的Field应该为 org.apache.solr.client.solrj.beans.Field
- SolrDocumentList list = response.getResults();
- DocumentObjectBinderL binder = new DocumentObjectBinderL();
- List<NewsBean> beanList=binder.getBeans(NewsBean.class, list);
- for(NewsBean news:beanList){
- System.out.println(news.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++;
- }
- for (FacetField ff : response.getFacetFields()) {
- System.out.println(ff.getName() + "," + ff.getValueCount() + ","
- + ff.getValues());
- }
- }
- }
- import java.io.IOException;
Solr JAVA客户端SolrJ 4.9使用示例教程的更多相关文章
- Solr JAVA客户端SolrJ的使用
一.Solrj简介 SolrJ是操作Solr的JAVA客户端,它提供了增加.修改.删除.查询Solr索引的JAVA接口.SolrJ针对 Solr提供了Rest 的HTTP接口进行了封装, SolrJ底 ...
- 推荐Java五大微服务器及其代码示例教程
来源素文宅博客:http://blog.yoodb.com/yoodb/article/detail/1339 微服务越来越多地用于开发领域,因为开发人员致力于创建更大,更复杂的应用程序,这些应用程序 ...
- 使用SolrJ(即java客户端)开发Solr。
1.什么是SolrJ呢? 答:Solrj是访问Solr服务的java客户端,提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,通过SolrJ的API接口操作Solr服务.开始配置schema ...
- Solr第二讲——SolrJ客户端的使用与案例
一.Solrj的使用 1.什么是Solrj solrj是访问Solr服务的java客户端(就像通过jedis操作redis一样),提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,通过Sol ...
- elasticsearch系列七:ES Java客户端-Elasticsearch Java client(ES Client 简介、Java REST Client、Java Client、Spring Data Elasticsearch)
一.ES Client 简介 1. ES是一个服务,采用C/S结构 2. 回顾 ES的架构 3. ES支持的客户端连接方式 3.1 REST API ,端口 9200 这种连接方式对应于架构图中的RE ...
- solr 学习之solrJ
solrJ是访问Solr服务的JAVA客户端,提供索引和搜索的请求方法,SolrJ通常嵌入在业务系统中,通过solrJ的API接口操作Solr服务. <!-- https://mvnreposi ...
- Solr——Java应用
Solr有一个客户端SolrJ 创建一个Java Project 引入Jar包 添加test类 package com.solr.test; import java.io.IOException; i ...
- Java与WCF交互(一)补充:用WSImport生成WSDL的Java客户端代码
在<Java与WCF交互(一):Java客户端调用WCF服务>一 文中,我描述了用axis2的一个Eclipse控件生成WCF的Java客户端代理类,后来有朋友建议用Xfire.CXF,一 ...
- Java与WCF交互(一):Java客户端调用WCF服务
最近开始了解WCF,写了个最简单的Helloworld,想通过java客户端实现通信.没想到以我的基础,居然花了整整两天(当然是工作以外的时间,呵呵),整个过程大费周折,特写下此文,以供有需要的朋友参 ...
随机推荐
- Solr auto commit 配置
为了解决写索引时频繁提交带来的效率问题,考虑使用自动提交. 在solrconfig.xml中增加以下代码: <updateHandler class="solr.DirectUpdat ...
- 网站通用登录模块代码 分类: ASP.NET 2014-12-06 10:49 615人阅读 评论(0) 收藏
1.HTML部分: <form id="form1" runat="server"> <script src=".. ...
- WPF中查看PDF文件
需要打开PDF文件时,我们第一印象就是使用Adobe Reader.在开发中,经常会遇到需要展示PDF文件的需求.我们会借助于Adobe Reader的Active控件来实现.不过这需要客户的机器上安 ...
- hdu 4738 2013杭州赛区网络赛 桥+重边+连通判断 ***
题意:有n座岛和m条桥,每条桥上有w个兵守着,现在要派不少于守桥的士兵数的人去炸桥,只能炸一条桥,使得这n座岛不连通,求最少要派多少人去. 处理重边 边在遍历的时候,第一个返回的一定是之前去的边,所以 ...
- HTML Entity Sets - All
http://www.htmlentities.com/html/entities/ The view below displays the characters used in the offici ...
- commonlisp教程以及学习笔记-01
手上有两个教程,但是感觉这个教程可能更适合自己
- 智能车学习(八)——菜单的实现
一.代码分享 1.头文件 #ifndef __MENU_H #define __MENU_H /***********宏定义************/ //页面声明 typedef enum Menu ...
- LoadRunner中截取字符串
LoadRunner中截取字符串 /*strchr和strrchr的区别*/ char *strTest1="citms citms"; char *strTest2,*strTe ...
- 深入理解KMP算法
前言:本人最近在看<大话数据结构>字符串模式匹配算法的内容,但是看得很迷糊,这本书中这块的内容感觉基本是严蔚敏<数据结构>的一个翻版,此书中给出的代码实现确实非常精炼,但是个人 ...
- Liferay 6.2 改造系列之十三:修改用户编辑页面表单内容
为简化用户编辑,删除无用内容: 在/portal-master/portal-impl/src/portal.properties文件中,有如下配置: # # Input a list of sect ...