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
相关推荐
solr3.6的增删改查操作和高亮以及分组
Solr 5.3.1搜索引擎搭建详细教程(包括集成mysql、添加中文分词、添加同义词、查询语法等)
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http G Solret操作提出查找请求,并得到XML...
SpringBoot-sel-del-up-addSpringBoot实现简单的增删改查1.本项目是基于postman进行测试的,大家也可以自己写一下页面项目创建后,下载jar很容易出错,所以大家要提前配置好maven,多更新几次
我们网站搜索如果数据量大的话,我们使用数据库直接查搜索会很慢,而且由于不能自动分词,结果往往不是很理想,现在我提供了一个例子,内含详细操作步骤和简单增删改查 Solr是一个独立的企业级搜索应用服务器,它...
对SOLR的环境搭建和增删改查的例子,希望初学者受用
这个项目是solr在SSM框架中的使用,实现了在solr中增删改查操作,支持中文分词搜索,高亮显示查询内容,点击查询,描述条件处输入内容进行查询,可以测试中文分词功能。
这个主要是整合了solr的spring+hibernate+webservice的一个框架代码,给大家讲解了solr的批次汇入和增删改查方法的实现方式,给初学者一些代码参考,希望能够帮助大家
包括Solr和ElasticSerch的增删改查客户端Java代码
本人基于solr的使用,对solr的简单使用操作进行了一下封装,包括了solr的增、删、改、查索引信息的全部操作,在查询的方法,本示例只返回了高亮部分的查询结果信息,如需其他信息请自行修改代码。
Jsp,freemarker,jquery,css+div,jstl标签struts-menu(了解),fckEditor(富文本编辑器) Springmvc,spring,mybatis cxf 文件服务器(jersy) Maven,svn,hudson Oracle Activiti ... Solr
让你更了解互联网是如何解决高并发 学完SSM框架的同学就可以学习,能让你切身感受到企业级开发环境目标1:完成solr环境安装、中文分析器和业务域的配置目标2:会使用Spring Data Solr完成增删改查操作目标3:完成...
商品管理:用户可以通过图形界面对商品进行增删改查,以及上传图片和富文本编辑。 商品搜索:用户可以通过 solr 搜索引擎对商品进行关键字搜索,以及按照类别、价格、销量等条件进行筛选。 商品详情:用户可以通过...
以前的搜索是利用like(模糊查询,数据库又不支持拆词),请求量太大,数据库压力太大(简单说就是崩盘,卡死),对于数据库而言,搜索比增删改查频繁,于是把搜索排除出去,将搜索数据导入搜索服务器. solr也是中间件,操作的是...
登陆注册,增删改查,提问,评论,敏感词过滤,站内信,点赞,新鲜事,邮件通知,solr搜索等 框架:SpringBoot + Mybatis 存储:数据库使用MySQL 缓存:Redis 模板引擎:freemarker 搜索引擎:solr 【技术栈】 基于...
[Spring Boot中使用MongoDB增删改查] [Spring Boot中使用RocketMQ] [Spring Boot中使用Redis] [Spring Boot中使用RabbitMQ] [Spring Boot中使用kafka] [Spring Boot中使用SolrCloud] [Spring Boot中使用...
大四工程实训做的仿小米商城网站,ssm框架写的: a)用户模块: ... ... b)商品模块 ...能够对购物车商品的增删改查。 d)订单模块 能够对订单进行查询。 e)在线支付模块 实现与第三方接口的在线支付。
自动生成增删改查 base_pagination.js 带分页 base.js 不带分页 3.2. dao 使用了mybatis逆向工程 4. 模块开发 逐个模块开发就好 4.1. 学会评估模块难不难 一个模块难不难从几方面考虑。 涉及几张表? 1,2张表的...
商品编辑:商品增删改查,使用了分页插件 上架:更改商品状态,添加商品信息到solr服务器,静态化商品页面 系统前台 商品检索:使用solr服务器进行全文检索,商品详情页面采用freemarker实现静态化 购物车:采用...
增删改查 16-SSM分布式案例-互联网商城(学习13天) day01_电商介绍--互联网术语-SOA-分布式-集群介绍-环境配置-框架搭建 day02_Dubbo介绍_dubbo框架整合_商品列表查询实现_分页_逆向工程 day03_Git day04_门户...