- 浏览: 944205 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (385)
- 搜索引擎学习 (62)
- 算法 (1)
- 数据库 (15)
- web开发 (38)
- solr开发 (17)
- nutch 1.2 系统学习 (8)
- cms (1)
- 系统架构 (11)
- linux 与 unix 编程 (16)
- android (15)
- maven (1)
- 关注物流 (1)
- 网址收集 (1)
- 分布式,集群 (1)
- mysql (5)
- apache (1)
- 资料文档备份 (7)
- 上班有感 (0)
- 工作流 (15)
- javascript (1)
- weblogic (1)
- eclipse 集成 (1)
- JMS (7)
- Hibernate (1)
- 性能测试 (1)
- spring (6)
- 缓存cache (1)
- mongodb (2)
- webservice (1)
- HTML5 COCOS2D-HTML5 (1)
- BrowserQuest (2)
最新评论
-
avi9111:
内陷到android, ios, winphone里面也是随便 ...
【HTML5游戏开发】二次开发 BrowserQuest 第一集 -
avi9111:
呵呵,做不下去了吧,没有第二集了吧,游戏是个深坑,谨慎进入,其 ...
【HTML5游戏开发】二次开发 BrowserQuest 第一集 -
excaliburace:
方案3亲测完全可用,顺便解决了我其他方面的一些疑问,非常感谢
spring security 2添加用户验证码 -
yuanliangding:
Spring太强大了。
Spring Data JPA 简单介绍 -
小高你好:
什么是hibernate懒加载?什么时候用懒加载?为什么要用懒加载?
1、solrserver的获取
1.1CommonsHttpSolrServer
CommonsHttpSolrServer 使用HTTPClient 和solr服务器进行通信。
Java代码
- String url = “http://localhost:8983/solr”;
- SolrServer server = new CommonsHttpSolrServer( url );
String url = "http://localhost:8983/solr"; SolrServer server = new CommonsHttpSolrServer( url );
Setting XMLResponseParser
sorlr J 目前使用二进制的格式作为默认的格式。对于solr1.2的用户通过显示的设置才能使用XML格式。
Java代码
- server.setParser(new XMLResponseParser());
server.setParser(new XMLResponseParser());
Changing other Connection Settings
CommonsHttpSorlrServer 允许设置链接属性。
Java代码
- String url = “http://localhost:8983/solr”
- CommonsHttpSolrServer server = new CommonsHttpSolrServer( url );
- server.setSoTimeout(1000); // socket read timeout
- server.setConnectionTimeout(100);
- 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);
- server.setMaxRetries(1); // defaults to 0. > 1 not recommended.
String url = "http://localhost:8983/solr" CommonsHttpSolrServer server = new CommonsHttpSolrServer( url ); server.setSoTimeout(1000); // socket read timeout server.setConnectionTimeout(100); 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); server.setMaxRetries(1); // defaults to 0. > 1 not recommended.
1.2EmbeddedSolrServer
EmbeddedSorrServer提供和CommonsHttpSorlrServer相同的接口,它不需要http连接。
Java代码
- SolrCore core = SolrCore.getSolrCore();
- SolrServer server = new EmbeddedSolrServer( core );
- …
SolrCore core = SolrCore.getSolrCore(); SolrServer server = new EmbeddedSolrServer( core ); ...
如果你想要使用 Multicore 特性,那么你可以这样使用:
Java代码
- File home = new File( getSolrHome() );
- File f = new File( home, “solr.xml” );
- multicore.load( getSolrHome(), f );
- EmbeddedSolrServer server = new EmbeddedSolrServer( multicore, “core name as defined in solr.xml” );
File home = new File( getSolrHome() ); File f = new File( home, "solr.xml" ); multicore.load( getSolrHome(), f ); EmbeddedSolrServer server = new EmbeddedSolrServer( multicore, "core name as defined in solr.xml" );
如果你在你的项目中内嵌solr服务,这将是一个不错的选择。无论你能否使用http,它都提供相同的接口。
用法
solrj 被设计成一个可扩展的框架,用以向solr服务器提交请求,并接收回应。
我们已经将最通用的一些命令封装在了solrServer类中了。
2.Adding Data to Solr
- 首先需要获得一个server的实例,
Java代码
- SolrServer server = getSolrServer();
SolrServer server = getSolrServer();
- 如果,你使用的是一个远程的solrServer的话呢,你或许会这样来实现getSolrServer()这个方法:
Java代码
- public SolrServer getSolrServer(){
- //the instance can be reused
- return new CommonsHttpSolrServer();
- }
public SolrServer getSolrServer(){ //the instance can be reused return new CommonsHttpSolrServer(); }
- 如果,你使用的是一个本地的solrServer的话,你或许会这样来实现getSolrServer()方法:
Java代码
- public SolrServer getSolrServer(){
- //the instance can be reused
- return new EmbeddedSolrServer();
- }
public SolrServer getSolrServer(){ //the instance can be reused return new EmbeddedSolrServer(); }
- 如果,你在添加数据之前,想清空现有的索引,那么你可以这么做:
Java代码
- server.deleteByQuery( “*:*” );// delete everything!
server.deleteByQuery( "*:*" );// delete everything!
- 构造一个document
Java代码 SolrInputDocument doc1 = new SolrInputDocument();
- doc1.addField( “id”, “id1″, 1.0f );
- doc1.addField( “name”, “doc1″, 1.0f );
- doc1.addField( “price”, 10 );
SolrInputDocument doc1 = new SolrInputDocument(); doc1.addField( "id", "id1", 1.0f ); doc1.addField( "name", "doc1", 1.0f ); doc1.addField( "price", 10 );
- 构造另外一个文档,每个文档都能够被独自地提交给solr,但是,批量提交是更高效的。每一个对SolrServer的请求都是http请求,当然对于EmbeddedSolrServer来说,是不一样的。
Java代码
- SolrInputDocument doc2 = new SolrInputDocument();
- doc2.addField( “id”, “id2″, 1.0f );
- doc2.addField( “name”, “doc2″, 1.0f );
- doc2.addField( “price”, 20 );
SolrInputDocument doc2 = new SolrInputDocument(); doc2.addField( "id", "id2", 1.0f ); doc2.addField( "name", "doc2", 1.0f ); doc2.addField( "price", 20 );
- 构造一个文档的集合
Java代码
- Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
- docs.add( doc1 );
- docs.add( doc2 );
Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>(); docs.add( doc1 ); docs.add( doc2 );
- 将documents提交给solr
Java代码
- server.add( docs );
server.add( docs );
- 提交一个commit
Java代码
- server.commit();
server.commit();
- 在添加完documents后,立即做一个commit,你可以这样来写你的程序:
Java代码
- UpdateRequest req = new UpdateRequest();
- req.setAction( UpdateRequest.ACTION.COMMIT, false, false );
- req.add( docs );
- UpdateResponse rsp = req.process( server );
UpdateRequest req = new UpdateRequest(); req.setAction( UpdateRequest.ACTION.COMMIT, false, false ); req.add( docs ); UpdateResponse rsp = req.process( server );
3.Directly adding POJOs to Solr
- 使用 java 注释创建java bean。@Field ,可以被用在域上,或者是setter方法上。如果一个域的名称跟bean的名称是不一样的,那么在java注释中填写别名,具体的,可以参照下面的域categories
Java代码
- import org.apache.solr.client.solrj.beans.Field;
- public class Item {
- @Field
- String id;
- @Field(“cat”)
- String[] categories;
- @Field
- List<String> features;
- }
import org.apache.solr.client.solrj.beans.Field; public class Item { @Field String id; @Field("cat") String[] categories; @Field List<String> features; }
- java注释也可以使用在setter方法上,如下面的例子:
Java代码
- @Field(“cat”)
- public void setCategory(String[] c){
- this.categories = c;
- }
@Field("cat") public void setCategory(String[] c){ this.categories = c; }
这里应该要有一个相对的,get方法(没有加java注释的)来读取属性
- Get an instance of server
Java代码
- SolrServer server = getSolrServer();
SolrServer server = getSolrServer();
- 创建bean实例
Java代码
- Item item = new Item();
- item.id = “one”;
- item.categories = new String[] { “aaa”, “bbb”, “ccc” };
Item item = new Item(); item.id = "one"; item.categories = new String[] { "aaa", "bbb", "ccc" };
- 添加给solr
Java代码
- server.addBean(item);
server.addBean(item);
- 将多个bean提交给solr
Java代码
- List<Item> beans ;
- //add Item objects to the list
- server.addBeans(beans);
List<Item> beans ; //add Item objects to the list server.addBeans(beans);
注意: 你可以重复使用SolrServer,这样可以提高性能。
4.Reading Data from Solr
- 获取solrserver的实例
Java代码
- SolrServer server = getSolrServer();
SolrServer server = getSolrServer();
- 构造 SolrQuery
Java代码
- SolrQuery query = new SolrQuery();
- query.setQuery( “*:*” );
- query.addSortField( “price”, SolrQuery.ORDER.asc );
SolrQuery query = new SolrQuery(); query.setQuery( "*:*" ); query.addSortField( "price", SolrQuery.ORDER.asc );
- 向服务器发出查询请求
Java代码
- QueryResponse rsp = server.query( query );
QueryResponse rsp = server.query( query );
- 获取结果。
Java代码
- SolrDocumentList docs = rsp.getResults();
SolrDocumentList docs = rsp.getResults();
- 想要以javabean的方式获取结果,那么这个javabean必须像之前的例子一样有java注释。
Java代码
- List<Item> beans = rsp.getBeans(Item.class);
List<Item> beans = rsp.getBeans(Item.class);
5.高级用法
solrJ 提供了一组API,来帮助我们创建查询,下面是一个faceted query的例子。
Java代码
- SolrServer server = getSolrServer();
- SolrQuery solrQuery = new SolrQuery().
- setQuery(“ipod”).
- setFacet(true).
- setFacetMinCount(1).
- setFacetLimit(8).
- addFacetField(“category”).
- addFacetField(“inStock”);
- QueryResponse rsp = server.query(solrQuery);
SolrServer server = getSolrServer(); SolrQuery solrQuery = new SolrQuery(). setQuery("ipod"). setFacet(true). setFacetMinCount(1). setFacetLimit(8). addFacetField("category"). addFacetField("inStock"); QueryResponse rsp = server.query(solrQuery);
所有的 setter/add 方法都是返回它自己本身的实例,所以就像你所看到的一样,上面的用法是链式的。
发表评论
-
IK的整个分词处理过程【转】
2013-01-08 12:48 1081首先,介绍一下IK的整个分词处理过程: 1. Lucene的 ... -
solr 4 分词报错 This Functionality requires the /analysis/field Handler to be regist
2013-01-08 11:43 2075This Functionality requires the ... -
solr multivalued 说明
2013-01-08 09:15 4811solr的schema.xml配置文件在配置field的时候有 ... -
solr 处理数据库数据索引 DataImportHandler 报内存不足,解决方案
2010-06-27 10:31 3035通过数据库,批量建立索引,如果数据量大,则会报内 ... -
solr 范围查询
2010-06-27 01:50 6540solr的范围查询 TO //s ... -
solr 通过 数据库导入 建立索引
2010-06-26 22:47 2329今天写错一个单词,忙会了,一下午,因为本人也是刚接触,所以对一 ... -
通过dataimport 建立solr索引
2010-06-26 14:01 5700今天写错一个单词,忙会了,一下午,因为本人也是刚接触,所以对一 ... -
SOLR 中 Schema.xml 的filedType 的一些属性的理解 [转]备注起来
2010-06-24 23:17 2607from matching across instances. ... -
solr 处理数据库数据索引 DataImportHandler 的使用[转]
2010-06-24 21:10 19711、编辑 solrconfig.xml 注册一个请求 uri ... -
solr morelikethis功能
2010-05-06 15:37 3135在 Google 上尝试一个查询,您会注意到每一个结果都包含 ... -
利用SOLR搭建企业搜索平台 之四(MultiCore)[转]
2010-04-22 21:54 1808利用SOLR搭建企业搜索平 ... -
利用SOLR搭建企业搜索平台 之三(配置文件)
2010-04-22 21:51 1380关键字: solr lucene 搭建 ... -
利用SOLR搭建企业搜索平台 之二(中文分词)[转]
2010-04-22 21:51 1838关键字: solr lucene 搭建 中文分词 http:/ ... -
利用SOLR搭建企业搜索平台 之一(运行solr)[转]
2010-04-22 21:49 1800在网络上找了很多的关 ... -
使用solr搭建你的全文检索[转]
2010-04-22 20:43 1372Solr 是一个可供企业使用的、基于 Lucene 的开箱即用 ... -
Solr的检索运算符[转]
2010-04-22 20:39 1579[Solr的检索运算符]? “:” 指定字段查指定值,如返回所 ...
相关推荐
solrj的facet查询总结
1、站内搜索的技术选型 2、什么是solr 3、solr的安装及配置 ...4、使用solr维护索引 a)添加 b)删除 c)修改 5、使用solr查询索引 6、Solr的客户端SolrJ a)solrJ维护索引 b)SolrJ查询索引 7、综合案例
详细介绍了solr中,各个功能的UI页面的使用,以及使用solrj操作solr的代码,比较全面的总结了solr的各个功能点。是不可多得的好资料!
包含solr的环境搭建及配置文件详解,和solrJ项目
当数据量达到TB或PB级的时候,传统关系型数据型已力不从心。在大数据热潮中,推出了NoSQL数据库,这种天生就为分布式存储而设计的技术,尤其以Apache HBase为代表,占领海量数据存储技术的大...课时36:课程总结
单机版solr6的安装及ik中文分词器的配置,solr的简单介绍及solrj的简单应用
13、Solr知识点总结 14、ElasticSearch下载安装(window以及linux下安装) 15、集群环境搭建 16、客户端Kibana安装与使用 17、集群管理插件head安装使用 18、java api 操作 ES 19、电商项目实战应用等等 ....
12、Solr知识点总结 1、熟练掌握Lucene框架的使用,实现类似百度、京东商城等应用的全文检索效果; 2、ElasticSearch下载安装(window以及linux下安装) 3、集群环境搭建 4、客户端Kibana安装与使用 5、集群管理...
7.7.5 部署总结 217 7.8 jQuery实现的自动完成 217 7.9 集成其他功能 223 7.9.1 拼写检查 223 7.9.2 分类统计 223 7.9.3 相关搜索 223 7.9.4 再次查找 226 7.9.5 搜索日志 226 7.10 搜索日志分析 228 7.11 本章小结 ...
solr讲解,案例分析