2012-01-09 74 views
1

我想在Ruby on Rails應用程序中使用Solr和太陽黑子(它將部署在JRuby環境中)。是否可以在JRuby on Rails應用程序中嵌入Solr服務器?

但是該應用程序將分發給最終用戶,我希望儘可能簡化安裝過程。所以我不想讓最終用戶(這不一定是具有強大軟件部署/開發技能的人)自己安裝Solr,我希望Web應用程序嵌入Solr服務器。

我想過使用http://wiki.apache.org/solr/EmbeddedSolr,但它不會很好,特別是太陽黑子。

我的第一個想法是提取Solr jar和web.xml,將它放在我的Rails應用程序中,並將Sunspot指向我的本地應用程序,但我想知道是否有人曾經這樣做過,如果有更簡單的方法它。

回答

3

太陽黑子使用RSolr與Solr進行通信。 RSolr使用Solr的標準HTTP接口。所以如果你想使用嵌入式Solr,你必須使用SolrJ,或者以某種方式使Sunspot改用SolrJ代替RSolr。

不過,在使用嵌入式Solr之前,我會考慮兩次(請參閱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("*:*") 
相關問題