Можно ли встроить сервер Solr в приложение JRuby on Rails? - PullRequest
1 голос
/ 09 января 2012

Я хочу использовать Solr и Sunspot в приложении Ruby on Rails (которое будет развернуто в среде JRuby).

Но приложение будет распространено среди конечных пользователей, и я хочу максимально упростить процесс установки. Так что я не хочу, чтобы конечный пользователь (который не обязательно будет парнем с сильными навыками развертывания / разработки программного обеспечения) самостоятельно устанавливал Solr, я хочу, чтобы в веб-приложение был встроен сервер Solr.

Я думал об использовании http://wiki.apache.org/solr/EmbeddedSolr,, но это не сработает, особенно с Sunspot.

Моя первая мысль - извлечь Solr jars и web.xml, поместить его в мое приложение Rails и указать Sunspot на мое локальное приложение, но я хочу знать, делал ли кто-нибудь это когда-нибудь и есть ли более простой способ сделать это .

Ответы [ 2 ]

3 голосов
/ 10 января 2012

Sunspot использует RSolr для связи с Solr.RSolr использует стандартный HTTP-интерфейс Solr.Поэтому, если вы хотите использовать встроенный Solr, вам придется использовать SolrJ или каким-то образом адаптировать Sunspot для использования SolrJ вместо RSolr.

Тем не менее, перед тем, как использоватьвстроенный Solr (см. вики ).Если вы используете прилагаемую Jetty, Solr не требует никакого процесса установки.

1 голос
/ 02 февраля 2013

Я получил это в зачаточном состоянии с jruby и solrj.Существует множество зависимостей для solr, и у меня не было времени, чтобы выяснить, какие именно jar требуются для всех компонентов solr.Поэтому следующий класс выполняет загрузку по умолчанию для solr и lucene, требуя все jar-файлы ... не очень эффективно.

Скачать Lucene 4.1, Solr 4.1, commons-fileupload-1.2.2.jar и jackson-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("*:*")
...