簡體   English   中英

是否可以在JRuby on Rails應用程序中嵌入Solr服務器?

[英]Is it possible do embed a Solr server inside a JRuby on Rails app?

我想在Ruby on Rails應用程序中使用Solr和Sunspot(它將部署在JRuby環境中)。

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

我想過使用http://wiki.apache.org/solr/EmbeddedSolr ,但它不會很好用,尤其是Sunspot。

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

太陽黑子使用RSolr與Solr通信。 RSolr使用Solr的標准HTTP接口。 因此,如果你想使用嵌入式Solr,你必須使用SolrJ ,或者以某種方式調整Sunspot以使用SolrJ代替RSolr。

不過,在使用嵌入式Solr之前我會考慮兩次(參見維基 )。 如果使用附帶的Jetty,Solr不需要任何安裝過程。

我用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("*:*")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM