2012-01-09 1 views
1

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

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

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

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

ответ

3

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

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

1

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

Загрузить 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("*:*") 

 Смежные вопросы

  • Нет связанных вопросов^_^