`
yinwufeng
  • 浏览: 277119 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Solr增删改查

阅读更多

Solr增删改查


1、solrserver的获取
1.1CommonsHttpSolrServer
CommonsHttpSolrServer 使用HTTPClient 和solr服务器进行通信。

Java代码
1.String url = “http://localhost:8983/solr”;
2.SolrServer server = new CommonsHttpSolrServer( url );
Setting XMLResponseParser
sorlr J 目前使用二进制的格式作为默认的格式。对于solr1.2的用户通过显示的设置才能使用XML格式。

Java代码
1.server.setParser(new XMLResponseParser());
Changing other Connection Settings
CommonsHttpSorlrServer 允许设置链接属性。

Java代码
1.String url = “http://localhost:8983/solr”
2.CommonsHttpSolrServer server = new CommonsHttpSolrServer( url );
3.server.setSoTimeout(1000); // socket read timeout
4.server.setConnectionTimeout(100);
5.server.setDefaultMaxConnectionsPerHost(100);
6.server.setMaxTotalConnections(100);
7.server.setFollowRedirects(false); // defaults to false
8.// allowCompression defaults to false.
9.// Server side must support gzip or deflate for this to have any effect.
10.server.setAllowCompression(true);
11.server.setMaxRetries(1); // defaults to 0.  > 1 not recommended.
1.2EmbeddedSolrServer
EmbeddedSorrServer提供和CommonsHttpSorlrServer相同的接口,它不需要http连接。

Java代码
1.SolrCore core = SolrCore.getSolrCore();
2.SolrServer server = new EmbeddedSolrServer( core );
3.…
如果你想要使用 Multicore 特性,那么你可以这样使用:

Java代码
1.File home = new File( getSolrHome() );
2.File f = new File( home, “solr.xml” );
3.multicore.load( getSolrHome(), f );
4.EmbeddedSolrServer server = new EmbeddedSolrServer( multicore,“core name as defined in solr.xml” );
如果你在你的项目中内嵌solr服务,这将是一个不错的选择。无论你能否使用http,它都提供相同的接口。

用法
solrj 被设计成一个可扩展的框架,用以向solr服务器提交请求,并接收回应。

我们已经将最通用的一些命令封装在了solrServer类中了。

2.Adding Data to Solr
•首先需要获得一个server的实例,
Java代码
1.SolrServer server = getSolrServer();
•如果,你使用的是一个远程的solrServer的话呢,你或许会这样来实现getSolrServer()这个方法:
Java代码
1.public SolrServer getSolrServer(){
2.//the instance can be reused
3.return new CommonsHttpSolrServer();
4.}
•如果,你使用的是一个本地的solrServer的话,你或许会这样来实现getSolrServer()方法:
Java代码
1.public SolrServer getSolrServer(){
2.//the instance can be reused
3.return new EmbeddedSolrServer();
4.}
•如果,你在添加数据之前,想清空现有的索引,那么你可以这么做:
Java代码
1.server.deleteByQuery( “*:*” );// delete everything!
•构造一个document
Java代码 SolrInputDocument doc1 = new SolrInputDocument();
1.doc1.addField( “id”, “id1″, 1.0f );
2.doc1.addField( “name”, “doc1″, 1.0f );
3.doc1.addField( “price”, 10 );
•构造另外一个文档,每个文档都能够被独自地提交给solr,但是,批量提交是更高效的。每一个对SolrServer的请求都是http请求,当然对于EmbeddedSolrServer来说,是不一样的。
Java代码
1.SolrInputDocument doc2 = new SolrInputDocument();
2.doc2.addField( “id”, “id2″, 1.0f );
3.doc2.addField( “name”, “doc2″, 1.0f );
4.doc2.addField( “price”, 20 );
•构造一个文档的集合
Java代码
1.Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
2.docs.add( doc1 );
3.docs.add( doc2 );
•将documents提交给solr
Java代码
1.server.add( docs );
•提交一个commit
Java代码
1.server.commit();
•在添加完documents后,立即做一个commit,你可以这样来写你的程序:
Java代码
1.UpdateRequest req = new UpdateRequest();
2.req.setAction( UpdateRequest.ACTION.COMMIT, false, false );
3.req.add( docs );
4.UpdateResponse rsp = req.process( server );
3.Directly adding POJOs to Solr
•使用 java 注释创建java bean。@Field ,可以被用在域上,或者是setter方法上。如果一个域的名称跟bean的名称是不一样的,那么在java注释中填写别名,具体的,可以参照下面的域categories
Java代码
1.import org.apache.solr.client.solrj.beans.Field;
2.public class Item {
3.@Field
4.String id;
5.@Field(“cat ”)
6.String[] categories;
7.@Field
8.List<String> features;
9.}
•java注释也可以使用在setter方法上,如下面的例子:
Java代码
1.@Field(“cat ”)
2.public void setCategory(String[] c){
3.this.categories = c;
4.}
这里应该要有一个相对的,get方法(没有加java注释的)来读取属性

•Get an instance of server
Java代码
1.SolrServer server = getSolrServer();
•创建bean实例
Java代码
1.Item item = new Item();
2.item.id = “one”;
3.item.categories =  new String[] { “aaa”, “bbb”, “ccc” };
•添加给solr
Java代码
1.server.addBean(item);
•将多个bean提交给solr
Java代码
1.List<Item> beans ;
2.//add Item objects to the list
3.server.addBeans(beans);
注意: 你可以重复使用SolrServer,这样可以提高性能。

4.Reading Data from Solr
•获取solrserver的实例
Java代码
1.SolrServer server = getSolrServer();
•构造 SolrQuery
Java代码
1.SolrQuery query = new SolrQuery();
2.query.setQuery( “*:*” );
3.query.addSortField( “price”, SolrQuery.ORDER.asc );
•向服务器发出查询请求
Java代码
1.QueryResponse rsp = server.query( query );
•获取结果。
Java代码
1.SolrDocumentList docs = rsp.getResults();
•想要以javabean的方式获取结果,那么这个javabean必须像之前的例子一样有java注释。
Java代码
1.List<Item> beans = rsp.getBeans(Item.class);
5.高级用法
solrJ 提供了一组API,来帮助我们创建查询,下面是一个faceted query的例子。

Java代码
1.SolrServer server = getSolrServer();
2.SolrQuery solrQuery = new SolrQuery().
3.setQuery(“ipod”).
4.setFacet(true).
5.setFacetMinCount(1).
6.setFacetLimit(8).
7.addFacetField(“category”).
8.addFacetField(“inStock”);
9.QueryResponse rsp = server.query(solrQuery);
所有的 setter/add 方法都是返回它自己本身的实例,所以就像你所看到的一样,上面的用法是链式的。

Highlighting
Highlighting parameters are set like other common parameters.

 

   view plaincopy to clipboardprint?01.SolrQuery query = new SolrQuery();  

02.   query.setQuery("foo");  

03. 

04.   query.setHighlight(true).setHighlightSnippets(1); //set other params as needed  

05.   query.setParam("hl.fl", "content");  

06. 

07.   QueryResponse queryResponse = getSolrServer().query(query);  

08.hen to get back the highlight results you need something like this:  

09.   Iterator<SolrDocument> iter = queryResponse.getResults().iterator();  

10. 

11.   while (iter.hasNext()) {  

12.     SolrDocument resultDoc = iter.next();  

13. 

14.     String content = (String) resultDoc.getFieldValue("content");  

15.     String id = (String) resultDoc.getFieldValue("id"); //id is the uniqueKey field  

16. 

17.     if (queryResponse.getHighlighting().get(id) != null) {  

18.       List<String> highlightSnippets = queryResponse.getHighlighting().get(id).get("content");  

19.     }  

20.   } 

 

转载:http://blog.sina.com.cn/s/blog_5ddc071f0100ol5s.html

分享到:
评论
2 楼 星期扒的幻想 2012-06-08  
学习了,了解了
1 楼 xjt927 2011-09-17  

相关推荐

    solr的增删改查和高亮以及分组

    solr3.6的增删改查操作和高亮以及分组

    Solr5.3.1搜索引擎搭建详细教程(包括集成mysql、添加中文分词、添加同义词、查询语法等)

    Solr 5.3.1搜索引擎搭建详细教程(包括集成mysql、添加中文分词、添加同义词、查询语法等)

    solr配置和solrj使用(demo)

    Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http G Solret操作提出查找请求,并得到XML...

    SpringBoot-sel-del-up-add:SpringBoot实现简单的增删改查,并集成了Redis,Solr

    SpringBoot-sel-del-up-addSpringBoot实现简单的增删改查1.本项目是基于postman进行测试的,大家也可以自己写一下页面项目创建后,下载jar很容易出错,所以大家要提前配置好maven,多更新几次

    Solr 搜索引擎 asp.net实现 示例详细操作步骤

    我们网站搜索如果数据量大的话,我们使用数据库直接查搜索会很慢,而且由于不能自动分词,结果往往不是很理想,现在我提供了一个例子,内含详细操作步骤和简单增删改查 Solr是一个独立的企业级搜索应用服务器,它...

    SOLR的学习资料

    对SOLR的环境搭建和增删改查的例子,希望初学者受用

    solr在SSM框架中使用(支持中文分词查询)

    这个项目是solr在SSM框架中的使用,实现了在solr中增删改查操作,支持中文分词搜索,高亮显示查询内容,点击查询,描述条件处输入内容进行查询,可以测试中文分词功能。

    solr+spring+hibernate+maven+webservice整合框架

    这个主要是整合了solr的spring+hibernate+webservice的一个框架代码,给大家讲解了solr的批次汇入和增删改查方法的实现方式,给初学者一些代码参考,希望能够帮助大家

    Solr和ElasticSearch全文检索客户端代码

    包括Solr和ElasticSerch的增删改查客户端Java代码

    solr5.5.4项目示例

    本人基于solr的使用,对solr的简单使用操作进行了一下封装,包括了solr的增、删、改、查索引信息的全部操作,在查询的方法,本示例只返回了高亮部分的查询结果信息,如需其他信息请自行修改代码。

    SpringMVC+redis完整案例

     Jsp,freemarker,jquery,css+div,jstl标签struts-menu(了解),fckEditor(富文本编辑器)  Springmvc,spring,mybatis  cxf  文件服务器(jersy)  Maven,svn,hudson  Oracle  Activiti ... Solr

    电商项目solr实战

    让你更了解互联网是如何解决高并发 学完SSM框架的同学就可以学习,能让你切身感受到企业级开发环境目标1:完成solr环境安装、中文分析器和业务域的配置目标2:会使用Spring Data Solr完成增删改查操作目标3:完成...

    基于 SSM 框架实现 Java 电商项目

    商品管理:用户可以通过图形界面对商品进行增删改查,以及上传图片和富文本编辑。 商品搜索:用户可以通过 solr 搜索引擎对商品进行关键字搜索,以及按照类别、价格、销量等条件进行筛选。 商品详情:用户可以通过...

    solr

    以前的搜索是利用like(模糊查询,数据库又不支持拆词),请求量太大,数据库压力太大(简单说就是崩盘,卡死),对于数据库而言,搜索比增删改查频繁,于是把搜索排除出去,将搜索数据导入搜索服务器. solr也是中间件,操作的是...

    基于SpringBoot+Mybatis实现的仿写知乎问答的网站源码+项目说明.zip

    登陆注册,增删改查,提问,评论,敏感词过滤,站内信,点赞,新鲜事,邮件通知,solr搜索等 框架:SpringBoot + Mybatis 存储:数据库使用MySQL 缓存:Redis 模板引擎:freemarker 搜索引擎:solr 【技术栈】 基于...

    SpringBoot模板:springboot和dubbo,netty的集成,redis mongodb的nosql模板,kafka rocketmq rabbit的MQ模板,solr solrcloud elasticsearch查询引擎

    [Spring Boot中使用MongoDB增删改查] [Spring Boot中使用RocketMQ] [Spring Boot中使用Redis] [Spring Boot中使用RabbitMQ] [Spring Boot中使用kafka] [Spring Boot中使用SolrCloud] [Spring Boot中使用...

    基于ssm的小米商城

    大四工程实训做的仿小米商城网站,ssm框架写的: a)用户模块: ... ... b)商品模块 ...能够对购物车商品的增删改查。 d)订单模块 能够对订单进行查询。 e)在线支付模块 实现与第三方接口的在线支付。

    黑马品优购项目

    自动生成增删改查 base_pagination.js 带分页 base.js 不带分页 3.2. dao 使用了mybatis逆向工程 4. 模块开发 逐个模块开发就好 4.1. 学会评估模块难不难 一个模块难不难从几方面考虑。 涉及几张表? 1,2张表的...

    SSMavenLhh:基于SSM+Maven的网上购物商城

    商品编辑:商品增删改查,使用了分页插件 上架:更改商品状态,添加商品信息到solr服务器,静态化商品页面 系统前台 商品检索:使用solr服务器进行全文检索,商品详情页面采用freemarker实现静态化 购物车:采用...

    全新JAVAEE大神完美就业实战课程 超150G巨制课程轻松实战JAVAEE课程 就业部分.txt

    增删改查 16-SSM分布式案例-互联网商城(学习13天) day01_电商介绍--互联网术语-SOA-分布式-集群介绍-环境配置-框架搭建 day02_Dubbo介绍_dubbo框架整合_商品列表查询实现_分页_逆向工程 day03_Git day04_门户...

Global site tag (gtag.js) - Google Analytics