- 浏览: 247555 次
- 性别:
- 来自: Shanghai
文章分类
最新评论
-
a790851624:
本人刚到公司,接到一个任务:在java代码中集成kettle的 ...
java应用程序中集成Kettle -
obnijeh:
谢谢共享,正需要。
Kettle 简介及Kettle用户操作手册 -
zhaokui:
很好,很好
Java中SimpleDateFormat用法详解——获得常用时间表示法(二) -
zhaokui:
,不错,不错
Java中SimpleDateFormat用法详解(一) -
babaoqi:
学习下,O(∩_∩)O谢谢了
Kettle 简介及Kettle用户操作手册
相信很多人,在准备提交数据让solr建立索引的那刻,很纳闷,尽管看了不少网上的一些文章,但是我想依然还是有不少不理解的地方。
比如提交一个xml,采用post方式,尽管有些文章说了可以采用httpclient。但是我那个时候,还不是很理解,当然现在看来其实也没有什么了。但是对于一个刚入门solr的初学者,我想讲讲关于solr1.3的 solrj( sorlr J 目前使用二进制的格式作为默认的格式。对于solr1.2的用户通过显示的设置才能使用XML格式。)!
先上一个例子:
- public static final String SOLR_URL = "http://localhost/solr/core0";
- public static void commit() {
- Date date = new Date();
- SolrServer solr = null;
- try {
- solr = new CommonsHttpSolrServer(SOLR_URL);
- } catch (MalformedURLException e1) {
- e1.printStackTrace();
- }
- for (int i = 0; i < 10000; i++) {
- SolrInputDocument sid = new SolrInputDocument();
- sid.addField("id", i);
- sid.addField("name", "struts+hibernate+spring 开发大全" + i);
- sid.addField("summary", "三种框架的综合应用" + i);
- sid.addField("author", "李良杰" + i);
- sid.addField("date", new Date());
- sid.addField("content", "高级应用类书籍" + i);
- sid.addField("keywords", "SSH" + i);
- try {
- solr.add(sid);
- } catch (MalformedURLException e) {
- e.printStackTrace();
- } catch (SolrServerException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- System.out.println(i);
- if (i == 999)
- System.out.println((new Date().getTime() - date.getTime()) / 60000 + "分钟");
- }
- try {
- solr.commit();
- } catch (SolrServerException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
public static final String SOLR_URL = "http://localhost/solr/core0";
public static void commit() {
Date date = new Date();
SolrServer solr = null;
try {
solr = new CommonsHttpSolrServer(SOLR_URL);
} catch (MalformedURLException e1) {
e1.printStackTrace();
}
for (int i = 0; i < 10000; i++) {
SolrInputDocument sid = new SolrInputDocument();
sid.addField("id", i);
sid.addField("name", "struts+hibernate+spring 开发大全" + i);
sid.addField("summary", "三种框架的综合应用" + i);
sid.addField("author", "李良杰" + i);
sid.addField("date", new Date());
sid.addField("content", "高级应用类书籍" + i);
sid.addField("keywords", "SSH" + i);
try {
solr.add(sid);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(i);
if (i == 999)
System.out.println((new Date().getTime() - date.getTime()) / 60000 + "分钟");
}
try {
solr.commit();
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
上面这段代码的意思是:利用for提交10000个document,并打印提交10000所需的时间。
1》CommonsHttpSolrServer 使用HTTPClient 和solr服务器进行通信。
2》CommonsHttpSorlrServer 允许设置链接属性。
- 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.
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.
3》实现SolrServer接口的另一个类:EmbeddedSorrServer,它不需要http连接。
4》在构造document的时候,可以一个一个添加到solrServer,也可以构建一个包含document的Collection,将Collection添加到solrServer,然后commit。
5》也可以构造一个跟document匹配的JavaBean进行提交
使用 java 注释创建java bean。@Field ,可以被用在域上,或者是setter方法上。如果一个域的名称跟bean的名称是不一样的,那么在java注释中填写别名,具体的,可以参照下面的域categories
- 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方法上,如下面的例子:
@Field("cat")
public void setCategory(String[] c){
this.categories = c;
}
这里应该要有一个相对的,get方法(没有加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
server.addBean(item);
将多个bean提交给solr
List<Item> beans ;
//add Item objects to the list
server.addBeans(beans);
注意: 你可以重复使用SolrServer,这样可以提高性能。
6》
- public static void update() {
- SolrServer solrServer = null;
- try {
- solrServer = new CommonsHttpSolrServer(SOLR_URL);
- } catch (MalformedURLException e) {
- e.printStackTrace();
- }
- UpdateRequest updateRequest = new UpdateRequest();
- SolrInputDocument sid = new SolrInputDocument();
- sid.addField("id", 100000);
- sid.addField("name", "struts+hibernate+spring 开发大全");
- sid.addField("summary", "三种框架的综合应用");
- sid.addField("author", "李良杰");
- sid.addField("date", new Date());
- sid.addField("content", "高级应用类书籍");
- sid.addField("keywords", "SSH");
- updateRequest.setAction(UpdateRequest.ACTION.COMMIT, false, false);
- updateRequest.add(sid);
- try {
- UpdateResponse updateResponse = updateRequest.process(solrServer);
- System.out.println(updateResponse.getStatus());
- } catch (SolrServerException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
public static void update() {
SolrServer solrServer = null;
try {
solrServer = new CommonsHttpSolrServer(SOLR_URL);
} catch (MalformedURLException e) {
e.printStackTrace();
}
UpdateRequest updateRequest = new UpdateRequest();
SolrInputDocument sid = new SolrInputDocument();
sid.addField("id", 100000);
sid.addField("name", "struts+hibernate+spring 开发大全");
sid.addField("summary", "三种框架的综合应用");
sid.addField("author", "李良杰");
sid.addField("date", new Date());
sid.addField("content", "高级应用类书籍");
sid.addField("keywords", "SSH");
updateRequest.setAction(UpdateRequest.ACTION.COMMIT, false, false);
updateRequest.add(sid);
try {
UpdateResponse updateResponse = updateRequest.process(solrServer);
System.out.println(updateResponse.getStatus());
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
提交一个document,采用更新方式,注意:
updateRequest.setAction(UpdateRequest.ACTION.COMMIT, false, false);
7》
- public static void query() {
- SolrServer solr = null;
- try {
- solr = new CommonsHttpSolrServer(SOLR_URL);
- } catch (MalformedURLException e) {
- e.printStackTrace();
- return;
- }
- // http://localhost:8983/solr/spellCheckCompRH?q=epod&spellcheck=on&spellcheck.build=true
- ModifiableSolrParams params = new ModifiableSolrParams();
- params.set("qt", "/spellCheckCompRH");
- params.set("q", "编程");
- params.set("spellcheck", "on");
- params.set("spellcheck.build", "true");
- QueryResponse response = null;
- try {
- response = solr.query(params);
- } catch (SolrServerException e) {
- e.printStackTrace();
- return;
- }
- System.out.println("response = " + response);
- }
public static void query() {
SolrServer solr = null;
try {
solr = new CommonsHttpSolrServer(SOLR_URL);
} catch (MalformedURLException e) {
e.printStackTrace();
return;
}
// http://localhost:8983/solr/spellCheckCompRH?q=epod&spellcheck=on&spellcheck.build=true
ModifiableSolrParams params = new ModifiableSolrParams();
params.set("qt", "/spellCheckCompRH");
params.set("q", "编程");
params.set("spellcheck", "on");
params.set("spellcheck.build", "true");
QueryResponse response = null;
try {
response = solr.query(params);
} catch (SolrServerException e) {
e.printStackTrace();
return;
}
System.out.println("response = " + response);
}
这是一个查询方法。关键字:“编程”。关于查询的关键字,请参见slor wiki http://wiki.apache.org/solr/QueryParametersIndex,或等待我的博客更新,在后面会有篇文章详细讲这个问题!
8》给solr的索引文件手动进行优化,
solr.optimize();
9》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 方法都是返回它自己本身的实例,所以就像你所看到的一样,上面的用法是链式的。
发表评论
-
企业级搜索引擎Solr使用入门指南
2010-07-06 16:05 1428由于搜索引擎功能在门 ... -
利用solr构建企业搜索平台 (十一)
2010-07-06 15:50 1612在经过使用了庖丁以后,这里说说怎么将目前很火很流行的IK集成进 ... -
利用solr构建企业搜索平台 (十)
2010-07-06 15:49 1364solr不可谓是个好东西啊,越往下挖掘,他的各种功能逐渐的展 ... -
利用solr构建企业搜索平台 (九)
2010-07-06 15:47 1204solr的一些查询语法 1. 首先假设我的数据里fiel ... -
利用solr构建企业搜索平台 (八)
2010-07-06 15:45 1313引用Bory.Chanhttp://blog.chenlb ... -
利用solr构建企业搜索平台 (七)
2010-07-06 15:44 1529某日,突发奇想,想写这么一个博客,希望记录下所有在solr中使 ... -
利用solr构建企业搜索平台 (六)
2010-07-06 15:42 1377solr查询参数说明) 在做solr查询的时候,solr提供 ... -
利用solr构建企业搜索平台(四)
2010-07-06 15:27 1345Solr Multicore 是 solr 1.3 的新特性。 ... -
利用solr构建企业搜索平台(三)
2010-07-06 15:15 1216运行solr是个很简单的事,如何让solr高效运行你的项目,这 ... -
利用solr构建企业搜索平台(二)
2010-07-06 14:55 1826这篇文章,主要说的是 怎么在solr中加入中文分词,参考了一些 ... -
利用solr构建企业搜索平台(一)
2010-07-06 14:44 2175在网络上找了很多的关于solr的资料,发现非常的不全面,即使就 ... -
solr 1.3 安装步骤
2010-06-07 13:28 932今天花了接近一下午的时间配置solr,主要问题是 可以通 ...
相关推荐
本文将详细阐述如何利用SOLR搭建一个企业搜索平台,包括所需环境、配置步骤以及中文分词的设置。 一、SOLR搭建企业搜索平台 1. **运行环境** - **运行容器**:Tomcat 6.0.20 - **Solr版本**:apache-solr-1.4.0 ...
标题中的“利用Solr搭建你的搜索引擎”意味着我们将探讨Apache Solr这一开源全文搜索平台的搭建过程。Solr是基于Lucene库的,提供了一个高效、可扩展的搜索和导航功能,广泛应用于各种企业的数据检索需求。 Solr的...
### Apache Solr 企业搜索引擎教程知识点总结 #### 1. Apache Solr 概述 - **Solr**:Apache Solr 是一款高度可扩展且高性能的企业级搜索平台,由Apache软件基金会维护。它是一个开源搜索服务器,使用Java语言编写...
基于Solr构建企业级信息检索系统是一种可行且有效的解决方案。通过深入分析企业需求,精心设计系统架构,可以显著提升企业内部信息检索的效率和用户体验,助力企业提升核心竞争力。Solr的成熟技术和灵活特性使其成为...
本篇文章将详细阐述如何利用Solr实现京东搜索的功能。 一、关键词搜索 在商品信息搜索中,关键词搜索是最基础也最重要的功能。用户输入关键词后,Solr会通过分析器对关键词进行分词处理,然后在索引库中匹配与之...
Apache Solr 是一个开源的全文搜索引擎,由Apache软件基金会维护,是Lucene项目的一部分。它提供了高效、可扩展的搜索和导航功能...熟悉这些知识点,可以帮助你更好地利用Apache Solr构建高性能的企业级搜索解决方案。
总的来说,Solr-9.0.0是一个强大且灵活的搜索平台,适用于需要大量数据搜索和分析的场景,如电商网站的商品搜索、新闻网站的内容检索、企业内部的文档搜索等。通过深入理解和熟练使用Solr,你可以为你的应用程序提供...
Solr是Apache软件基金会的一个开源项目,它是基于Java的全文搜索服务器,采用了Lucene库作为其...通过深入学习和实践这些内容,开发者可以掌握如何利用Solr构建高性能的全文搜索引擎,解决各种实际问题,提升系统性能。
Solr搜索引擎的使用介绍 Solr,全称为Apache Solr,是Apache软件基金会的一个开源项目,基于Java开发,是一款...通过理解其核心概念、特性以及应用场景,我们可以充分利用Solr来提升系统的搜索性能,优化用户体验。
根据提供的信息,我们可以总结出以下关于Apache Solr的相关知识点: ### Apache Solr简介 Apache Solr是一款开源的、高性能的企业级...在Java开发环境下,利用Solr进行高效的搜索服务构建是完全可行且易于实现的。
《开源企业搜索引擎Solr的应用教程》 在当今信息爆炸的时代,高效、精准的搜索成为企业的核心竞争力之一。开源的企业搜索引擎Solr...通过深入学习和实践,开发者能够充分利用Solr的优势,为企业构建高性能的搜索应用。
ES(ElasticSearch)和Solr都是基于Lucene的搜索引擎,它们各自提供了一套搜索框架,用于实现高效的全文搜索功能。由于两者都是在Apache License 2下开源的,因此在选择使用哪种搜索方案时,需要根据不同的使用场景...
Solr是Apache软件基金会的一个开源项目,它是基于Java的全文搜索服务器,被广泛应用于企业级搜索引擎的构建。源码分析是深入理解一个软件系统工作原理的重要途径,对于Solr这样的复杂系统尤其如此。这里我们将围绕...
Solr,全称为Apache Solr,是一款开源的企业级全文搜索引擎,由Java编写,它提供了高效、可扩展的搜索和分析功能。在这个“solr导航搜索工具+文档+配置代码”压缩包中,包含了Solr的相关资源,可以帮助我们快速理解...
Solr是中国Apache软件基金会开发的一款开源全文搜索引擎,它基于Java平台,可以实现高效、可扩展的搜索和分析功能。...通过深入理解和实践,可以进一步掌握如何利用Solr构建高性能的企业级搜索解决方案。
Solr,全称为Apache Solr,是Apache软件基金会的一个开源项目,主要用来处理全文搜索、企业级搜索和数据索引。它基于Java平台,利用...了解它们的功能并正确使用,将有助于你有效地利用Solr进行全文搜索和数据管理。
【Solr自学详细教程,吐血总结】 在IT领域,特别是在大数据处理和信息检索中,Apache Solr扮演着至关重要的角色。...通过学习和实践,开发者可以掌握如何利用Solr构建高性能的站内搜索,提升用户的搜索体验。