使用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 的,下面是连接服务器的具体代码:
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. String url = "http://localhost:8080/solr";  
  2. HttpSolrServer server = new HttpSolrServer(url);  
  3. server.setMaxRetries(1); // defaults to 0. > 1 not recommended.  
  4. server.setConnectionTimeout(5000); // 5 seconds to establish TCP  
  5. // Setting the XML response parser is only required for cross  
  6. // version compatibility and only when one side is 1.4.1 or  
  7. // earlier and the other side is 3.1 or later.  
  8. server.setParser(new XMLResponseParser()); // binary parser is used by  
  9.                                             // default  
  10. // The following settings are provided here for completeness.  
  11. // They will not normally be required, and should only be used  
  12. // after consulting javadocs to know whether they are truly required.  
  13. server.setSoTimeout(1000); // socket read timeout  
  14. server.setDefaultMaxConnectionsPerHost(100);  
  15. server.setMaxTotalConnections(100);  
  16. server.setFollowRedirects(false); // defaults to false  
  17. // allowCompression defaults to false.  
  18. // Server side must support gzip or deflate for this to have any effect.  
  19. server.setAllowCompression(true);  

EmbeddedSolrServer

另外,solrj提供另外一种不通过http连接solr的方式,直接通过在本地访问文件的方式连接solr服务。
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. // Note that the following property could be set through JVM level arguments too  
  2.  System.setProperty("solr.solr.home""/home/shalinsmangar/work/oss/branch-1.3/example/solr");  
  3.  CoreContainer.Initializer initializer = new CoreContainer.Initializer();  
  4.  CoreContainer coreContainer = initializer.initialize();  
  5.  EmbeddedSolrServer server = new EmbeddedSolrServer(coreContainer, "");  

如果使用了多个core,可以通过下面的方式。
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. File home = new File( "/path/to/solr/home" );  
  2. File f = new File( home, "solr.xml" );  
  3. CoreContainer container = new CoreContainer();  
  4. container.load( "/path/to/solr/home", f );  
  5.   
  6. EmbeddedSolrServer server = new EmbeddedSolrServer( container, "core name as defined in solr.xml" );  


向solr服务器添加数据
连接成功后,我们可以使用server进行数据的提交。

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. SolrInputDocument doc1 = new SolrInputDocument();  
  2. doc1.addField( "id""333333333333333"1.0f );  
  3. doc1.addField( "name""3333333333333333333"1.0f );  
  4. doc1.addField( "price"10 );  
  5. server.add(doc1);  
  6. server.commit();  
提交成功后,可以通过solr admin查看索引是否增加了,但是最简单的方式就是调用查询方法,查询一下。

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. SolrQuery solrQuery = new SolrQuery();  
  2. solrQuery.setQuery("q=3333333333333333333");  
  3. QueryResponse queryResponse= server.query(solrQuery);     
  4. System.out.println(queryResponse.getResults().get(0).getFieldValue("name"));  

向solr服务添加pojo的数据

首先我们需要新建一个Java bean。

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. public class Item {  
  2.       
  3.     @Field  
  4.     private String id;  
  5.       
  6.     @Field  
  7.     private String category;  
  8.   
  9.     @Field  
  10.     private List<String> features;  
  11.   
  12.     public String getId() {  
  13.         return id;  
  14.     }  
  15.   
  16.     public void setId(String id) {  
  17.         this.id = id;  
  18.     }  
  19.   
  20.     public String getCategory() {  
  21.         return category;  
  22.     }  
  23.   
  24.     public void setCategory(String category) {  
  25.         this.category = category;  
  26.     }  
  27.   
  28.     public List<String> getFeatures() {  
  29.         return features;  
  30.     }  
  31.       
  32.     public void setFeatures(List<String> features) {  
  33.         this.features = features;  
  34.     }  
  35.       
  36. }  
向solr添加数据。

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. Item item = new Item();  
  2. item.setId("201404300001");  
  3. item.setCategory("category");  
  4. item.setFeatures(Arrays.asList("feature1","feature2","feature3"));  
  5. server.addBean(item);  
  6. server.commit();  
搜索一下,验证是否添加成功。

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. SolrQuery solrQuery = new SolrQuery();  
  2. solrQuery.setQuery("q=feature1");  
  3. QueryResponse queryResponse= server.query(solrQuery);     
  4. List<Item> items = queryResponse.getBeans(Item.class);  
  5. System.out.println(items.get(0).getCategory());  
0 0
原创粉丝点击