3.跟我学solr---使用solrj加入索引
上一章讲了怎么使用solr admin向solrserver加入索引,Solr 是一个独立的企业级搜索应用server。它对外提供类似于 Web-service 的 API 接口。
用户能够通过 http请求,向搜索引擎server提交一定格式的 XML 文件,生成索引。也能够通过 Http
Get 操作提出查找请求,并得到XML 格式的返回结果。
所以我们能够使用httpClient作为client向solrserver加入索引。可是幸运的是,solr为我们提供专门的clientjar包。solrj,我们能够使用该jar包向solrserver提交索引。
首先我们导入相关的包,相关的jar包能够通过下载的solr的压缩包中获取,当中包含:
1.dist/solrj-lib
2.dist/solr-solrj-*.jar
把这些jar包导入到classpath中,我们就能够開始使用solrj了。
HttpSolrServer
String url = "http://localhost:8080/solr";
HttpSolrServer server = new HttpSolrServer(url);
server.setMaxRetries(1); // defaults to 0. > 1 not recommended.
server.setConnectionTimeout(5000); // 5 seconds to establish TCP
// Setting the XML response parser is only required for cross
// version compatibility and only when one side is 1.4.1 or
// earlier and the other side is 3.1 or later.
server.setParser(new XMLResponseParser()); // binary parser is used by
// default
// The following settings are provided here for completeness.
// They will not normally be required, and should only be used
// after consulting javadocs to know whether they are truly required.
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);
EmbeddedSolrServer
另外。solrj提供第二种不通过http连接solr的方式。直接通过在本地訪问文件的方式连接solr服务。
// Note that the following property could be set through JVM level arguments too
System.setProperty("solr.solr.home", "/home/shalinsmangar/work/oss/branch-1.3/example/solr");
CoreContainer.Initializer initializer = new CoreContainer.Initializer();
CoreContainer coreContainer = initializer.initialize();
EmbeddedSolrServer server = new EmbeddedSolrServer(coreContainer, "");
假设使用了多个core。能够通过以下的方式。
File home = new File( "/path/to/solr/home" );
File f = new File( home, "solr.xml" );
CoreContainer container = new CoreContainer();
container.load( "/path/to/solr/home", f ); EmbeddedSolrServer server = new EmbeddedSolrServer( container, "core name as defined in solr.xml" );
连接成功后。我们能够使用server进行数据的提交。
SolrInputDocument doc1 = new SolrInputDocument();
doc1.addField( "id", "333333333333333", 1.0f );
doc1.addField( "name", "3333333333333333333", 1.0f );
doc1.addField( "price", 10 );
server.add(doc1);
server.commit();
提交成功后。能够通过solr admin查看索引是否添加了,可是最简单的方式就是调用查询方法,查询一下。
SolrQuery solrQuery = new SolrQuery();
solrQuery.setQuery("q=3333333333333333333");
QueryResponse queryResponse= server.query(solrQuery);
System.out.println(queryResponse.getResults().get(0).getFieldValue("name"));
向solr服务加入pojo的数据
首先我们须要新建一个java bean。
public class Item {
@Field
private String id;
@Field
private String category;
@Field
private List<String> features;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public List<String> getFeatures() {
return features;
}
public void setFeatures(List<String> features) {
this.features = features;
}
}
向solr加入数据。
Item item = new Item();
item.setId("201404300001");
item.setCategory("category");
item.setFeatures(Arrays.asList("feature1","feature2","feature3"));
server.addBean(item);
server.commit();
搜索一下,验证是否加入成功。
SolrQuery solrQuery = new SolrQuery();
solrQuery.setQuery("q=feature1");
QueryResponse queryResponse= server.query(solrQuery);
List<Item> items = queryResponse.getBeans(Item.class);
System.out.println(items.get(0).getCategory());
3.跟我学solr---使用solrj加入索引的更多相关文章
- Solr系列四:Solr(solrj 、索引API 、 结构化数据导入)
一.SolrJ介绍 1. SolrJ是什么? Solr提供的用于JAVA应用中访问solr服务API的客户端jar.在我们的应用中引入solrj: <dependency> <gro ...
- org.apache.solr.client.solrj.impl.HttpSolrServer$RemoteSolrException: Internal Server Error 错误
Solr报错: { "responseHeader": { "status": 500, "QTime": 11 }, "erro ...
- Solr 14 - SolrJ操作SolrCloud集群 (Solr的Java API)
目录 1 pom.xml文件的配置 2 SolrJ操作SolrCloud 1 pom.xml文件的配置 项目的pom.xml依赖信息请参照: Solr 09 - SolrJ操作Solr单机服务 (So ...
- Solr 09 - SolrJ操作Solr单机服务 (Solr的Java API)
目录 1 SolrJ是什么 2 SolrJ对索引的CRUD操作 2.1 创建Maven工程(打包方式选择为jar) 2.2 配置pom.xml文件, 加入SolrJ的依赖 2.3 添加和修改索引 2. ...
- Java操作Solr之SolrJ
添加SolrJ的jar包 solrj是访问Solr服务的java客户端,提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,通过SolrJ的API接口操作Solr服务, <depende ...
- JAVAEE——Solr:安装及配置、后台管理索引库、 使用SolrJ管理索引库、仿京东的电商搜索案例实现
1 学习回顾 1. Lucene 是Apache开源的全文检索的工具包 创建索引 查询索引 2. 遇到问题? 文件名 及文件内容 顺序扫描法 全文检索 3. 什么是全文检索? 这种先创建索引 再 ...
- Solr学习笔记(3) —— SolrJ管理索引库&集群
一.什么是SolrJ solrj是访问Solr服务的java客户端,提供索引和搜索的请求方法,SolrJ通常嵌入在业务系统中,通过SolrJ的API接口操作Solr服务,如下图: 二.SolrJ的基本 ...
- solr 4.4添加索引是新手容易遇到的问题
solr 4.4添加索引是新手容易遇到的问题异常一.Exception in thread "main" java.lang.NoClassDefFoundError: org/a ...
- 企业级搜索引擎Solr 第三章 索引数据(Indexing Data)[1]
转载:http://quweiprotoss.wap.blog.163.com/ Push data to Solr or have Solr pull it 尽管一个应用通过HTTP方式与Solr通 ...
随机推荐
- css网页自适应-1
一."自适应网页设计"的概念 2010年,Ethan Marcotte提出了"自适应网页设计"(Responsive Web Design)这个名词,指可以自动 ...
- 如何提高banner设计含量--网上的一篇文章--感悟
"修改": 本质上是改什么?改大小?图片?文字?颜色? 老板说:修改本质上是提高“设计含量”.检测一个作品设计含量的高低,可以将作品中每一个设计元素进行分析,看它的“属性”与“操作 ...
- 用 PS 调整服务器时间
用 PS 调整服务器时间 Powershell 有一个命令用来调整计算机的时间, Set-Date -Adjust,但是,只能调整本地时间,不能调整远程的计算机时间. function AdjustD ...
- [Swust OJ 666]--初来乍到(题号都这么溜~~,递归,找规律)
题目链接:http://acm.swust.edu.cn/problem/0666/ Time limit(ms): 1000 Memory limit(kb): 65535 Descriptio ...
- Android的回调
学了两三周的安卓了,最先开始是看mars老师的视频,看了一两天结合慕课网上的一些安卓视频,到现在算是有点入门了. 安卓立用得比较多的回调函数有点不明是怎么实现的,网上找了一些资料,结合自己的实践,总算 ...
- Android访问网络
Android中访问网络用的是HttpClient的方式,即Apache提供的一个jar包.安卓中继承了改jar包,所以安卓adt中不需要专门import该jar,直接就可以使用. 以下是MainAc ...
- Python 数据处理扩展包: pandas 模块的DataFrame介绍(创建和基本操作)
DataFrame是Pandas中的一个表结构的数据结构,包括三部分信息,表头(列的名称),表的内容(二维矩阵),索引(每行一个唯一的标记). 一.DataFrame的创建 有多种方式可以创建Data ...
- JavaScript自调用匿名函数
Self-Invoking Anonymous Function,即自调用匿名函数.顾名思义,该函数没有名称,不同的是,该函数定义后立即被调用.该函数的作用是在应用中初始化或做一次性工作. 普通匿名函 ...
- 评侯捷的<深入浅出MFC>和李久进的<MFC深入浅出>
侯捷的<深入浅出mfc>相信大家都已经很熟悉了,论坛上也有很多介绍,这里我就不多说了. 而李久进的<mfc深入浅出>,听说的人可能就少得多.原因听说是这本书当时没有怎么宣传,而 ...
- Android蓝牙A2dp profile的使用
A2dp profile是android支持的一种蓝牙情景模式,一般用于蓝牙立体声耳机,即蓝牙音频的输出 在android的app层中,A2dp的使用并不是很开放,api只提供了非常少的操作接口,连基 ...