2012-01-09 1 views
1

JRuby 환경에 배포 될 Ruby on Rails 앱에서 Solr과 Sunspot을 사용하고 싶습니다.JRuby on Rails 앱 내에 Solr 서버를 내장 할 수 있습니까?

하지만 앱이 최종 사용자에게 배포되며 가능한 한 쉽게 설치 프로세스를 만들고 싶습니다. 그래서 최종 사용자 (반드시 강력한 소프트웨어 배포/개발 기술을 가진 사람)는 Solr을 직접 설치하지 않으려 고합니다. Webapp에 Solr 서버를 임베드해야합니다.

나는 http://wiki.apache.org/solr/EmbeddedSolr을 사용하려고 생각했지만, 특별히 Sunspot에서는 잘 동작하지 않을 것이다.

내 첫 번째 생각은 Solr jars와 web.xml을 추출하여 내 Rails 앱에 저장하고 Sunspot을 로컬 앱으로 지정하는 것입니다.하지만 누구나 쉽게 할 수 있는지 그리고 더 쉬운 방법이 있는지 알고 싶습니다. 그것.

답변

3

Sunspot은 을 사용하여 Solr과 통신합니다. RSolr은 Solr의 표준 HTTP 인터페이스를 사용합니다. 따라서 임베디드 솔을 사용하려면 SolrJ을 사용해야합니다. 그렇지 않으면 Sunspot을 RSolr 대신 SolrJ를 사용하도록 조정해야합니다.

여전히 임베디드 솔 (wiki 참조)을 사용하기 전에 두 번 생각해 보겠습니다. 포함 된 Jetty를 사용하는 경우 Solr에는 설치 프로세스가 필요하지 않습니다.

1

나는 jruby와 solrj와 함께 기본적인 작업을하고있다. solr에 대한 의존성의 톤이 있고 모든 solr 구성 요소에 필요한 jar를 정확하게 계산할 시간이 없습니다. 따라서 다음 클래스는 기본 solr 및 lucene 다운로드를 통해 실행되며 모든 jar를 필요로합니다 ... 매우 효율적이지는 않습니다.

다운로드 Lucene 4.1, Solr 4.1, commons-fileupload-1.2.2.jarjackson-4.0.6-jar-with-dependencies.jar. 마지막 것은 com.google.common.cache.CacheBuilder 클래스입니다. 나는 그것을 다른 곳에서 찾을 수 없었다.

solr-jars 디렉토리에 저장하십시오. .rb 파일에 다음을 저장하고 jruby로 실행하십시오.

require 'java' 

module Solr 

    class SolrServer 

     include_package 'org.apache.solr.core' 
     include_package 'org.apache.solr.client.solrj' 
     include_package 'org.apache.solr.client.solrj.embedded' 
     include_package 'org.apache.lucene' 

     def initialize(jarpath, solr_home, core) 
      Dir["#{jarpath}/**/*.jar"].each { |f| puts f; require f;} 
      java.lang.System.setProperty('solr.solr.home',solr_home) 
      initializer = CoreContainer::Initializer.new 
      coreContainer = initializer.initialize__method() 
      @server = EmbeddedSolrServer.new(coreContainer,core) 
     end 

     def query(q) 
      solr_query = SolrQuery.new 
      solr_query.setQuery q 
      puts @server.query(solr_query) 
     end 

    end 

end 

solr = Solr::SolrServer.new('solr-jars','solr-jars/solr-4.1.0/example/solr','collection1') 
solr.query("*:*")