`
kobe学java
  • 浏览: 258404 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

利用SOLR搭建企业搜索平台 之五(solrj)

 
阅读更多

http://www.dzxiaoshuo.com 

相信很多人,在准备提交数据让solr建立索引的那刻,很纳闷,尽管看了不少网上的一些文章,但是我想依然还是有不少不理解的地方。 
比如提交一个xml,采用post方式,尽管有些文章说了可以采用httpclient。但是我那个时候,还不是很理解,当然现在看来其实也没有什么了。但是对于一个刚入门solr的初学者,我想讲讲关于solr1.3的 solrj( sorlr J 目前使用二进制的格式作为默认的格式。对于solr1.2的用户通过显示的设置才能使用XML格式。)! 

先上一个例子: 
Java代码  收藏代码
  1. public static final String SOLR_URL = "http://localhost/solr/core0";  
  2. public static void commit() {  
  3.     Date date = new Date();  
  4.     SolrServer solr = null;  
  5.     try {  
  6.         solr = new CommonsHttpSolrServer(SOLR_URL);  
  7.     } catch (MalformedURLException e1) {  
  8.         e1.printStackTrace();  
  9.     }  
  10. for (int i = 0; i < 10000; i++) {  
  11.             SolrInputDocument sid = new SolrInputDocument();  
  12.             sid.addField("id", i);  
  13.             sid.addField("name""struts+hibernate+spring 开发大全" + i);  
  14.             sid.addField("summary""三种框架的综合应用" + i);  
  15.             sid.addField("author""李良杰" + i);  
  16.             sid.addField("date"new Date());  
  17.             sid.addField("content""高级应用类书籍" + i);  
  18.             sid.addField("keywords""SSH" + i);  
  19.             try {  
  20.                 solr.add(sid);  
  21.             } catch (MalformedURLException e) {  
  22.                 e.printStackTrace();  
  23.             } catch (SolrServerException e) {  
  24.                 e.printStackTrace();  
  25.             } catch (IOException e) {  
  26.                 e.printStackTrace();  
  27.             }  
  28.             System.out.println(i);  
  29.             if (i == 999)   
  30.                 System.out.println((new Date().getTime() - date.getTime()) / 60000 + "分钟");  
  31.         }  
  32.         try {  
  33.             solr.commit();  
  34.         } catch (SolrServerException e) {  
  35.             e.printStackTrace();  
  36.         } catch (IOException e) {  
  37.             e.printStackTrace();  
  38.         }  
  39. }  


上面这段代码的意思是:利用for提交10000个document,并打印提交10000所需的时间。 
1》CommonsHttpSolrServer 使用HTTPClient 和solr服务器进行通信。 

2》CommonsHttpSorlrServer 允许设置链接属性。 
Java代码  收藏代码
  1. server.setSoTimeout(1000);  // socket read timeout    
  2.   server.setConnectionTimeout(100);    
  3.   server.setDefaultMaxConnectionsPerHost(100);    
  4.   server.setMaxTotalConnections(100);    
  5.   server.setFollowRedirects(false);  // defaults to false    
  6.   // allowCompression defaults to false.    
  7.   // Server side must support gzip or deflate for this to have any effect.    
  8.   server.setAllowCompression(true);    
  9.   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          
Java代码  收藏代码
  1. import org.apache.solr.client.solrj.beans.Field;    
  2.  public class Item {    
  3.     @Field    
  4.     String id;    
  5.     @Field("cat")    
  6.     String[] categories;     
  7.     @Field    
  8.     List<String> features;     
  9.   }    

java注释也可以使用在setter方法上,如下面的例子: 
Java代码  收藏代码
  1. @Field("cat")    
  2.  public void setCategory(String[] c){    
  3.      this.categories = c;    
  4.  }  
  
这里应该要有一个相对的,get方法(没有加java注释的)来读取属性 
Java代码  收藏代码
  1. Item item = new Item();    
  2. item.id = "one";    
  3. item.categories =  new String[] { "aaa""bbb""ccc" };   

添加给solr          
Java代码  收藏代码
  1. server.addBean(item);  
  
将多个bean提交给solr 
Java代码  收藏代码
  1. List<Item> beans ;    
  2. //add Item objects to the list    
  3. server.addBeans(beans);  
     
注意: 你可以重复使用SolrServer,这样可以提高性能。 

6》 
Java代码  收藏代码
  1. public static void update() {  
  2.     SolrServer solrServer = null;  
  3.     try {  
  4.         solrServer = new CommonsHttpSolrServer(SOLR_URL);  
  5.     } catch (MalformedURLException e) {  
  6.         e.printStackTrace();  
  7.     }  
  8.     UpdateRequest updateRequest = new UpdateRequest();  
  9.     SolrInputDocument sid = new SolrInputDocument();  
  10.     sid.addField("id"100000);  
  11.     sid.addField("name""struts+hibernate+spring 开发大全");  
  12.     sid.addField("summary""三种框架的综合应用");  
  13.     sid.addField("author""李良杰");  
  14.     sid.addField("date"new Date());  
  15.     sid.addField("content""高级应用类书籍");  
  16.     sid.addField("keywords""SSH");  
  17.     updateRequest.setAction(UpdateRequest.ACTION.COMMIT, falsefalse);    
  18.     updateRequest.add(sid);    
  19.     try {  
  20.         UpdateResponse updateResponse = updateRequest.process(solrServer);  
  21.         System.out.println(updateResponse.getStatus());  
  22.     } catch (SolrServerException e) {  
  23.         e.printStackTrace();  
  24.     } catch (IOException e) {  
  25.         e.printStackTrace();  
  26.     }  
  27. }  

提交一个document,采用更新方式,注意:
Java代码  收藏代码
  1. updateRequest.setAction(UpdateRequest.ACTION.COMMIT, falsefalse);  


7》
Java代码  收藏代码
  1. public static void query() {  
  2.     SolrServer solr = null;  
  3.     try {  
  4.         solr = new CommonsHttpSolrServer(SOLR_URL);  
  5.     } catch (MalformedURLException e) {  
  6.         e.printStackTrace();  
  7.         return;  
  8.     }  
  9.     // http://localhost:8983/solr/spellCheckCompRH?q=epod&spellcheck=on&spellcheck.build=true  
  10.     ModifiableSolrParams params = new ModifiableSolrParams();  
  11.     params.set("qt""/spellCheckCompRH");  
  12.     params.set("q""编程");  
  13.     params.set("spellcheck""on");  
  14.     params.set("spellcheck.build""true");  
  15.     QueryResponse response = null;  
  16.     try {  
  17.         response = solr.query(params);  
  18.     } catch (SolrServerException e) {  
  19.         e.printStackTrace();  
  20.         return;  
  21.     }  
  22.     System.out.println("response = " + response);  
  23. }  

这是一个查询方法。关键字:“编程”。关于查询的关键字,请参见slor wikihttp://wiki.apache.org/solr/QueryParametersIndex或等待我的博客更新,在后面会有篇文章详细讲这个问题! 

8》给solr的索引文件手动进行优化,
Java代码  收藏代码
  1. solr.optimize();  


9》solrJ 提供了一组API,来帮助我们创建查询,下面是一个faceted query的例子。 
Java代码 
Java代码  收藏代码
  1. SolrServer server = getSolrServer();    
  2. SolrQuery solrQuery = new  SolrQuery().setQuery("ipod").setFacet(true).setFacetMinCount(1).setFacetLimit(8).      addFacetField("category").addFacetField("inStock");      
  3. QueryResponse rsp = server.query(solrQuery);  
  
所有的 setter/add 方法都是返回它自己本身的实例,所以就像你所看到的一样,上面的用法是链式的。 
分享到:
评论

相关推荐

    人工智能-项目实践-搜索引擎-基于solrj开发solr主从搜索引擎服务的dubbo组件

    本项目实践聚焦于利用Solrj开发一个支持主从复制的Solr搜索引擎服务,并通过Dubbo组件实现服务的分布式部署与调用。以下将详细阐述这个项目的重点内容和关键技术。 首先,Solr是Apache软件基金会的一个开源项目,它...

    solr环境搭建总结一

    Solr是Apache Lucene项目下的一个企业级搜索服务器,它提供了全文检索、高亮显示、 faceted search(分面搜索)以及实时分析等功能。本文将详细介绍如何搭建Solr环境,并解析其配置文件,同时也会涉及SolrJ客户端的...

    solr集群搭建

    Solr集群搭建是一个复杂但重要的过程,用于实现大型、高可用性和可扩展性的搜索解决方案。Apache Solr是一款基于Lucene的开源全文搜索引擎,它提供了分布式搜索、近实时处理、多字段排序等功能。以下是对Solr集群...

    solr的搭建入门

    Apache Solr是一款开源的企业级搜索平台,由Apache软件基金会开发,它提供了全文检索、命中高亮、拼写检查、Faceted Search(分面搜索)等多种功能,广泛应用于网站内容搜索、电商商品检索等领域。本文将详细介绍...

    solr全文检索

    这可能包括分片和复制策略以分散负载,使用倒排索引来加速查询,以及利用Solr的缓存机制。 总的来说,这个压缩包提供了一个全面的学习资源,涵盖了从Solr的基本安装和配置,到实际的索引操作、查询构建,再到系统的...

    Java搜索服务Solr操作指南.pdf

    Solr是一个独立的基于全文检索的企业级搜索应用服务器,它支持通过HTTP利用XML将文档加载到搜索集合中,用户可以通过HttpGet操作发送查找请求,并得到搜索的返回结果。在Java后台开发中,Solr通过SolrJ客户端库与...

    solr搜索引擎的使用介绍

    Solr搜索引擎的使用介绍 Solr,全称为Apache Solr,是Apache软件基金会的一个开源项目,基于Java开发,是一款...通过理解其核心概念、特性以及应用场景,我们可以充分利用Solr来提升系统的搜索性能,优化用户体验。

    solr全文检索环境搭建

    Solr全文检索环境搭建 Apache Solr是一款基于Java的开源搜索服务器,专为高效全文检索、拼写检查、高亮显示结果以及...记住,实践是掌握技术的关键,不断尝试和探索,你将能更好地利用Solr提升你的应用的搜索体验。

    solr-7.0.0

    总的来说,Solr-7.0.0是一个强大且灵活的搜索平台,适合处理大量数据的全文搜索场景。通过与Redis集成,可以进一步优化性能,提高用户体验。用户可以依据自己的需求,配置索引、调整集群结构,以实现高效、可靠的...

    org.apache.servicemix.bundles.solr-solrj-4.6.1_1.zip

    总结这些信息,我们可以知道这是一个基于Maven构建的Java项目,它与Apache Solr搜索引擎交互,可能利用SolrJ库进行索引管理和查询操作。同时,项目中可能包含对Jade模板引擎的支持,用于生成动态网页内容。作为一个...

    apache-solr-3.5.0.jar

    Apache Solr是一个开源的企业级搜索平台,用于构建高效、可扩展的全文检索应用。这个名为"apache-solr-3.5.0.jar"的压缩包包含两个关键组件:`apache-solr-core-3.5.0.jar`和`apache-solr-solrj-3.5.0.jar`,它们...

    自己搭建的Solr环境

    Solr是Apache软件基金会开发的一款高性能、全文搜索引擎,它提供了分布式搜索、索引和分析大量数据的能力。在本文中,我们将深入探讨如何自己搭建一个Solr环境,以及在这个过程中涉及的关键知识点。 首先,我们需要...

    Solr开发指南.pdf

    - SolrJ搜索:通过SolrJ执行搜索请求,获取和解析查询结果。 【Solr案例分析】 - 需求分析:在实际项目中,需要明确搜索功能的需求,例如搜索速度、准确性、用户体验等。 - 架构设计:设计Solr的部署架构,考虑...

    solr开发详解

    Solr 基于 Java 开发,利用 Lucene 作为其核心搜索引擎库。 - **特点**: - 可扩展性和高度可配置性。 - 高度优化的 Lucene 性能。 - 提供了丰富的查询语言和强大的全文检索功能。 #### Solr与Lucene的区别 - *...

    solr教程+实例

    Apache Solr是一款开源的企业级全文搜索引擎,由Apache软件基金会开发,基于Java语言,具有高效、可扩展的特点。它为大型、分布式搜索应用提供了强大的支持,包括文档检索、拼写建议、高亮显示搜索结果、近似搜索等...

    solr教材-PDF版

    - **1.2.5 缓存**:Solr利用多种缓存机制来提高搜索响应速度,例如查询结果缓存、文档缓存等。 - **1.2.6 复制**:Solr支持主/从架构,通过复制功能可以在多个服务器间同步索引数据,确保数据的一致性和冗余。 - **...

    solr的安装使用步骤

    3. **编写代码**:利用 SolrJ API 实现数据索引和搜索功能。 ```java import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client...

    搭建Solr集群

    #### 五、使用 solrj 管理 Solr 集群 - **概述**:solrj 是 Java API 形式提供的客户端库,允许开发者通过编程方式与 Solr 交互。 - **应用场景**: - **索引文档**:使用 solrj 可以方便地向 Solr 集群添加、删除...

    利用solr实现商品的搜索功能(实例讲解)

    利用Solr实现商品搜索功能 Solr是一款基于Lucene的全文搜索服务器,提供了丰富的查询语言,实现了可配置、可扩展,并对索引、搜索性能进行了优化。Solr是一个全文检索服务器,只需要进行配置就可以实现全文检索服务...

    solr各个热点功能详解

    - **搜索建议**:利用Solr的 autocomplete 功能,可以提供实时的搜索建议,提升用户体验。 - **分组统计**:通过Grouping功能,可以对搜索结果进行分类统计,便于数据分析。 - **自动聚类**:Solr的Clustering...

Global site tag (gtag.js) - Google Analytics