使用SolrJ创建索引
来源:互联网 发布:淘宝制作图片软件 编辑:程序博客网 时间:2024/05/01 10:52
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了。
HttpSolrServer
HttpSolrServer是用于连接solr服务器的类,它的底层实现是依赖apache 的 httpclient 的,下面是连接服务器的具体代码:
- String url = "http://localhost:8080/solr";
- HttpSolrServer server = new HttpSolrServer(url);
- server.setMaxRetries(1);
- server.setConnectionTimeout(5000);
-
-
-
- server.setParser(new XMLResponseParser());
-
-
-
-
- server.setSoTimeout(1000);
- server.setDefaultMaxConnectionsPerHost(100);
- server.setMaxTotalConnections(100);
- server.setFollowRedirects(false);
-
-
- server.setAllowCompression(true);
EmbeddedSolrServer
另外,solrj提供另外一种不通过http连接solr的方式,直接通过在本地访问文件的方式连接solr服务。
-
- 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" );
向solr服务器添加数据
连接成功后,我们可以使用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());
0 0