使用SolrJ创建索引
2016-12-21 15:07
330 查看
Solr 是一个独立的企业级搜索应用服务器,它对外提供类似于 Web-service 的 API 接口。用户可以通过 http请求,向搜索引擎服务器提交一定格式的 XML 文件,生成索引;也可以通过 Http
Get 操作提出查找请求,并得到XML 格式的返回结果。所以我们可以使用httpClient作为客户端向solr服务器添加索引,但是幸运的是,solr为我们提供专门的客户端jar包,solrj,我们可以使用该jar包向solr服务器提交索引。
首先我们导入相关的包,相关的jar包可以通过下载的solr的压缩包中获取,其中包括:
1.dist/solrj-lib
2.dist/solr-solrj-*.jar
把这些jar包导入到classpath中,我们就可以开始使用solrj了。
[java] view
plain copy
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);
另外,solrj提供另外一种不通过http连接solr的方式,直接通过在本地访问文件的方式连接solr服务。
[java] view
plain copy
// 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,可以通过下面的方式。
[java] view
plain copy
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" );
向solr服务器添加数据
连接成功后,我们可以使用server进行数据的提交。
[java] view
plain copy
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查看索引是否增加了,但是最简单的方式就是调用查询方法,查询一下。
[java] view
plain copy
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。
[java] view
plain copy
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添加数据。
[java] view
plain copy
Item item = new Item();
item.setId("201404300001");
item.setCategory("category");
item.setFeatures(Arrays.asList("feature1","feature2","feature3"));
server.addBean(item);
server.commit();
搜索一下,验证是否添加成功。
[java] view
plain copy
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());
Get 操作提出查找请求,并得到XML 格式的返回结果。所以我们可以使用httpClient作为客户端向solr服务器添加索引,但是幸运的是,solr为我们提供专门的客户端jar包,solrj,我们可以使用该jar包向solr服务器提交索引。
首先我们导入相关的包,相关的jar包可以通过下载的solr的压缩包中获取,其中包括:
1.dist/solrj-lib
2.dist/solr-solrj-*.jar
把这些jar包导入到classpath中,我们就可以开始使用solrj了。
HttpSolrServer
HttpSolrServer是用于连接solr服务器的类,它的底层实现是依赖apache 的 httpclient 的,下面是连接服务器的具体代码:[java] view
plain copy
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服务。[java] view
plain copy
// 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,可以通过下面的方式。
[java] view
plain copy
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" );
向solr服务器添加数据
连接成功后,我们可以使用server进行数据的提交。
[java] view
plain copy
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查看索引是否增加了,但是最简单的方式就是调用查询方法,查询一下。
[java] view
plain copy
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。
[java] view
plain copy
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添加数据。
[java] view
plain copy
Item item = new Item();
item.setId("201404300001");
item.setCategory("category");
item.setFeatures(Arrays.asList("feature1","feature2","feature3"));
server.addBean(item);
server.commit();
搜索一下,验证是否添加成功。
[java] view
plain copy
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());
相关文章推荐
- solrj的使用,环境准备,工程搭建,索引创建,添加\修改索引,删除索引,查询
- solrJ的使用--覆盖创建索引,查询,删除索引【转自http://blog.sina.com.cn/s/blog_64ac3ab10100t3mq.html】
- 索引的创建及使用(sqlserver 2000)
- mssql:t-sql;创建表;给表添加约束;使用变量;事务,索引,视图;存储过程;触发器trigger;播放器http://www.smartgz.com/blog/Article/956.asp
- 使用org.apache.lucene创建和查询索引核心代码详解
- 索引的创建及使用(sqlserver 2005) --很全面的资讯,收藏学习
- DX编程(3) —— 使用索引缓冲 创建2个三角形
- 使用索引创建内标行
- mysql 索引的使用 之 创建 、 删除
- 创建数据库、表、主外键、各种约束、存储过程、视图、索引、事务使用、触发器、创建登录账号、数据库用户 Sql语句示例
- Oracle创建索引,修改索引,使用同义词
- 各类索引的创建和使用方法
- Oracle索引分析与比较(二)—— 各种索引的创建方法、使用场合及建议
- 创建索引时应该考虑该列使用时最可能的排序方式
- 索引创建和使用
- 索引的创建及使用(sqlserver 2005)
- 索引的创建及使用(sqlserver 2000)
- 索引的创建及使用(sqlserver 2005)
- 使用SQL语句为SQL Server 2005创建全文索引
- 使用org.apache.lucene创建和查询索引核心代码详解