SimpleDBのRailsアプリケーションに対するsolrサポートの構成


環境の設定
  • 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
  • である.
     
     
    手順1:Tomcat 6のインストール
       
    tomcatのインストールはapt-getで完了できます
     
     
    ステップ2:Solrの構成
        1. 解凍apache-solr-xxx.zip、ホームディレクトリの下にjava_に保存appフォルダでは、apache-solrと名付けられ、example/webappsの下のsolr.warはexample/solrディレクトリにコピーし、
     
        2. sorlを追加します.xml
    /var/lib/tomcat 6/conf/Catalina/localhostディレクトリに入り、solrを新規作成します.xml、内容を書きます:
     
    <?xml version="1.0" encoding="utf-8"?>
    <Context docBase="$SOLR_HOME/solr.war"
                   debug="0" crossContext="true">
      <Environment name="solr/home" type="java.lang.String"
                             value="$SOLR_HOME" override="true"/>
    </Context>

     
     
        3. インデックスファイルの保存場所を設定するには、$SOLR_を変更する必要があります.HOME/conf/solrconfig.xml
  • 修正${solr.data.dir:./solr/data}${solr.data.dir:$INDEX_HOME}
  • 新規$INDEX_HOMEが表すフォルダ
  • このフォルダを変更する所有者はtomcat 6
  • です.
    sudo chown –R tomcat6:tomcat6 solr

     
     
         4. 構成の検証
  • Apacheを再起動し、localhost:8080/solrにアクセスし、solrのページに正常にアクセスできれば、以前の構成が正常であることを証明します.
  • インデックス機能が正常であることを確認:
  • i.から$SOLR_へHOME/exampledocsディレクトリでは、以下のコマンドをsolrとして実行します.xmlファイルインデックスの作成
     
    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
     
        <fieldType name="text" class="solr.TextField" >
          <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
          <analyzer type="index">
            <tokenizer
               class="org.wltea.analyzer.solr.IKTokenizerFactory"
               isMaxWordLength="false"/>
            <filter class="solr.StopFilterFactory"
                    ignoreCase="true" words="stopwords.txt"/>
            <filter class="solr.WordDelimiterFilterFactory"
                    generateWordParts="1"
                    generateNumberParts="1"
                    catenateWords="1"
                    catenateNumbers="1"
                    catenateAll="0"
                    splitOnCaseChange="1"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.EnglishPorterFilterFactory"
                    protected="protwords.txt"/>
            <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
          </analyzer>
          <analyzer type="query">
            <tokenizer
               class="org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="false"/>
            <filter class="solr.StopFilterFactory"
                    ignoreCase="true" words="stopwords.txt"/>
            <filter class="solr.WordDelimiterFilterFactory"
                    generateWordParts="1"
                    generateNumberParts="1"
                    catenateWords="1"
                    catenateNumbers="1"
                    catenateAll="0"
                    splitOnCaseChange="1"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.EnglishPorterFilterFactory"
                    protected="protwords.txt"/>
            <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
          </analyzer>
        </fieldType>
    

        6.中国語の分詞パッケージIKAnalyzer 3を取得する.2.8.JAr、$TOMCAT_にコピーHOME/webapps/solr/WEB-INF/libで、所有者と所有グループをtomcat 6に変更
     
        7. 中国語の分詞機能を検証するsolr.xmlに中国語を追加し、その語を検索する手順は5ステップと同じです.
     
     
     
     
    ステップ3:add sunspot support to Rails
        1.gemfileを変更し、行の内容を追加
     
    gem 'sunspot_rails'

     
           
     
    bundle install

     
     
        2.sunspotプロファイルを生成し、Railsプロジェクトで次のコマンドを実行します.
     
    rails generate sunspot_rails:install
     
     
        3. 修正ymlファイル
     
    production:
      solr:
        hostname: localhost
        port: 8080
        path: '/solr/'
        log_level: WARNING
    
    development:
      solr:
        hostname: localhost
        port: 8080
        path: '/solr/'
        log_level: INFO
    
    test:
      solr:
        hostname: localhost
        port: 8080
        path: '/solr/'
        log_level: WARNING
    

     
        4. Modelにsolrのサポートを追加するには、ここではPostクラスを例に説明します.
  • simpleRecord用にアダプタを作成し、SunspotHelperモジュールを追加し、2つのアダプタクラス
  • を作成します.
    require 'rubygems'
    require 'sunspot'
    
    module SunspotHelper  
      class InstanceAdapter < Sunspot::Adapters::InstanceAdapter
        def id
          if(@instance.class.to_s == "String")
            @instance
          else       
            @instance.id
          end
        end
      end
      
      class DataAccessor < Sunspot::Adapters::DataAccessor
        def load(id)
          # clazz: get the class name
          @clazz.find(id)
        end
        
      end    
    end
    

     
  • このアダプタ
  • をPostクラスで参照
    Sunspot::Adapters::InstanceAdapter.register(SunspotHelper::InstanceAdapter, Post, String)
    Sunspot::Adapters::DataAccessor.register(SunspotHelper::DataAccessor, Post, String)

     
     
    Sunspot.setup(Post) do
        text :title, :body
        time :date, :trie => true    
    end
    
    def save
        super()
        Sunspot.index(self)
        Sunspot.commit
    end
      
  • は~/.rvm/gems/ruby-1.9.2-p 180/gems/sunspot-1.2.0/solr/confでのschema.xmlファイルを$SOLR_にコピーHOME/confで元のschemaを置き換えます.xmlを押して、前のステップの5番目のポイントで中国語の分詞機能を構成します. 

  •     5. 
    にある
    rails
    を選択
    ,
    可在
    console
    で実行する必要があります.
    post = Post.first
    => ...
    post.save
    => {"responseHeader"=>{"status"=>0, "QTime"=>480}}
    search = Sunspot.search(Post) { keywords '  ' }
    => <Sunspot::Search:{:fq=>["type:Post"] …
    r = search.results
    =>  [#<Post:0x961886c ...
    
    の構成に成功しました.