2012-01-09 57 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("*:*") 
相关问题