为针对于SimpleDB的Rails应用程序配置solr支持

来源:互联网 发布:win10优化设置在哪里 编辑:程序博客网 时间:2024/06/07 23:34

为针对于SimpleDB的Rails应用程序配置solr支持

    博客分类: 
  • Rails开发
RailsSolrSunspotSunspot_railsNosql 

配置环境

  • Server: Ubuntu 10.04
  • solr version: 1.4.1
  • sunspot_rails version: 1.2.0

  • Tomcat6_home: /var/lib/tomcat6

  • $SOLR_HOME = /home/ubuntu/java_app/apache-solr/example/solr

注:存放solr.war,conf/文件夹中存放solr的配置文件

  • $INDEX_HOME = /home/ubuntu/solr/data

注:存放索引文件所在的位置

  • 注:本文中使用的Model层并非针对于传统关系型数据库的ActiveRecord,而是针对于SimpleDB的SimpleRecord


 

 

步骤一:安装Tomcat6

   

      tomcat的安装可以通过apt-get完成

 

 

步骤二:配置Solr

    1. 解压apache-solr-xxx.zip,存放在家目录下在java_app文件夹中,此处命名为apache-solr,将example/webapps下的solr.war拷贝到example/solr目录下,

 

    2. 添加sorl.xml

        进入/var/lib/tomcat6/conf/Catalina/localhost目录,新建solr.xml,编写一下内容:

 

Xml代码  收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <Context docBase="$SOLR_HOME/solr.war"  
  3.                debug="0" crossContext="true">  
  4.   <Environment name="solr/home" type="java.lang.String"  
  5.                          value="$SOLR_HOME" override="true"/>  
  6. </Context>  

 

 

    3. 配置索引文件存放的位置,需要修改$SOLR_HOME/conf/solrconfig.xml

  •  修改<dataDir>${solr.data.dir:./solr/data}</dataDir>为<dataDir>${solr.data.dir:$INDEX_HOME }</dataDir>
  •  新建$INDEX_HOME所代表的文件夹
  •  修改该文件夹的拥有者为tomcat6
Shell代码  收藏代码
  1. sudo chown –R tomcat6:tomcat6 solr  

 

 

     4. 验证配置

  • 重启Apache, 访问localhost:8080/solr,如果能正常访问solr的页面,证明之前的配置都正常。
  • 验证索引功能是否正常:

            i. 到$SOLR_HOME/exampledocs目录下,执行以下命令为solr.xml文件建立索引

 

Java代码  收藏代码
  1. java -Durl=http://localhost:8080/solr/update -jar post.jar solr.xml  

 

 

            ii. 在http://localhost:8080/solr/admin后台检索界面输入“solr”进行检索,有返回结果证明已经正确建立索引。

 

 

     5. 配置中文分词功能,需要修改$SOLR_HOME/solr/conf/schema.xml

 

Xml代码  收藏代码
  1. <fieldType name="text" class="solr.TextField" >  
  2.   <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>  
  3.   <analyzer type="index">  
  4.     <tokenizer  
  5.        class="org.wltea.analyzer.solr.IKTokenizerFactory"  
  6.        isMaxWordLength="false"/>  
  7.     <filter class="solr.StopFilterFactory"  
  8.             ignoreCase="true" words="stopwords.txt"/>  
  9.     <filter class="solr.WordDelimiterFilterFactory"  
  10.             generateWordParts="1"  
  11.             generateNumberParts="1"  
  12.             catenateWords="1"  
  13.             catenateNumbers="1"  
  14.             catenateAll="0"  
  15.             splitOnCaseChange="1"/>  
  16.     <filter class="solr.LowerCaseFilterFactory"/>  
  17.     <filter class="solr.EnglishPorterFilterFactory"  
  18.             protected="protwords.txt"/>  
  19.     <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>  
  20.   </analyzer>  
  21.   <analyzer type="query">  
  22.     <tokenizer  
  23.        class="org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="false"/>  
  24.     <filter class="solr.StopFilterFactory"  
  25.             ignoreCase="true" words="stopwords.txt"/>  
  26.     <filter class="solr.WordDelimiterFilterFactory"  
  27.             generateWordParts="1"  
  28.             generateNumberParts="1"  
  29.             catenateWords="1"  
  30.             catenateNumbers="1"  
  31.             catenateAll="0"  
  32.             splitOnCaseChange="1"/>  
  33.     <filter class="solr.LowerCaseFilterFactory"/>  
  34.     <filter class="solr.EnglishPorterFilterFactory"  
  35.             protected="protwords.txt"/>  
  36.     <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>  
  37.   </analyzer>  
  38. </fieldType>  

    6. 获得中文分词包IKAnalyzer3.2.8.jar,并拷贝到$TOMCAT_HOME/webapps/solr/WEB-INF/lib中,并修改其拥有者和拥有组为tomcat6

 

    7. 验证中文分词功能,在solr.xml中增加中文,然后搜索该词,过程同第5步。

 

 

 

 

步骤三:add sunspot support to Rails

    1. 修改gemfile,增加一行内容

 

Gemfile代码  收藏代码
  1. gem 'sunspot_rails'  

 

       然后执行

 

Shell代码  收藏代码
  1. bundle install  

 

 

    2. 生成sunspot配置文件,在Rails项目中执行以下命令:

 

Shell代码  收藏代码
  1. rails generate sunspot_rails:install  
 

 

    3. 修改sunspot.yml文件

 

Yml代码  收藏代码
  1. production:  
  2.   solr:  
  3.     hostname: localhost  
  4.     port: 8080  
  5.     path: '/solr/'  
  6.     log_level: WARNING  
  7.   
  8. development:  
  9.   solr:  
  10.     hostname: localhost  
  11.     port: 8080  
  12.     path: '/solr/'  
  13.     log_level: INFO  
  14.   
  15. test:  
  16.   solr:  
  17.     hostname: localhost  
  18.     port: 8080  
  19.     path: '/solr/'  
  20.     log_level: WARNING  

 

    4. 为Model增加solr的支持,这里以Post类为例进行说明

  • simpleRecord编写适配器,新增一个SunspotHelper模块,编写两个适配器类
Ruby代码  收藏代码
  1. require 'rubygems'  
  2. require 'sunspot'  
  3.   
  4. module SunspotHelper    
  5.   class InstanceAdapter < Sunspot::Adapters::InstanceAdapter  
  6.     def id  
  7.       if(@instance.class.to_s == "String")  
  8.         @instance  
  9.       else         
  10.         @instance.id  
  11.       end  
  12.     end  
  13.   end  
  14.     
  15.   class DataAccessor < Sunspot::Adapters::DataAccessor  
  16.     def load(id)  
  17.       # clazz: get the class name  
  18.       @clazz.find(id)  
  19.     end  
  20.       
  21.   end      
  22. end  

 

  • Post类中引用该适配器
Ruby代码  收藏代码
  1. Sunspot::Adapters::InstanceAdapter.register(SunspotHelper::InstanceAdapter, Post, String)  
  2. Sunspot::Adapters::DataAccessor.register(SunspotHelper::DataAccessor, Post, String)  

 

 

Ruby代码  收藏代码
  1. Sunspot.setup(Post) do  
  2.     text :title:body  
  3.     time :date:trie => true      
  4. end  
  5.   
  6. def save  
  7.     super()  
  8.     Sunspot.index(self)  
  9.     Sunspot.commit  
  10. end  
  
  • ~/.rvm/gems/ruby-1.9.2-p180/gems/sunspot-1.2.0/solr/solr/conf下的schema.xml文件拷贝到$SOLR_HOME/conf下替换掉原来的schema.xml,并按上一步中的第5点配置中文分词功能。 

    5. rails中进行搜索可在console中进行以下调试
Ruby代码  收藏代码
  1. post = Post.first  
  2. => ...  
  3. post.save  
  4. => {"responseHeader"=>{"status"=>0, "QTime"=>480}}  
  5. search = Sunspot.search(Post) { keywords '想想' }  
  6. => <Sunspot::Search:{:fq=>["type:Post"] …  
  7. r = search.results  
  8. =>  [#<Post:0x961886c ...  
    配置成功。

 

 

原创粉丝点击