[英]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指向我的本地应用程序,但我想知道是否有人曾经做过它以及是否有更简单的方法。
我用jruby和solrj以一种初步的方式工作。 solr有很多依赖关系,我没有时间精确计算出所有solr组件都需要哪些jar。 所以下面的类运行默认的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("*:*")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.