2012-06-28 109 views
6

为SOLR DataImportHandler配置文件包含SQL查询来对数据库,如何产生的列到Solr文档字段映射运行,当然,参数需要连接到数据库。Solr的DataImport:管理配置不同的环境(开发/分期/生产)

在我们的项目中,数据库连接参数(特别是数据库密码)的变化,从环境到环境,这迫使我们保持一个略微不同的整机配置XML文件的副本,为每个环境。

有没有从SQL语句和声明分别配置数据库连接参数(特别是密码)的方式,让每个配置一次且仅一次维护?

回答

2

这是Solr中的一个已知问题。

如果你看看Solr文档或者Solr企业服务器书,他们说你可以使用core1.properties和key = value并在你的xml配置文件中使用key ...但是根据我的经验,不行。我已经尝试了几种方法,在solr邮件列表上有关于此的开放问题。

所以你不得不诉诸丑陋的解决方法(如使用模板xml文件,并与真正的密码等替代#密码#)。

+0

我确信你可以通过传递参数dataimport网址,但这太吸取密码我猜... – javanna

+0

谢谢javanna。它很烂,但在这种情况下,它会适用于我们。 – jsalvata

4

其实这可以使用标准solr配置完成。

首先,你需要在solrconfig.xml中定义数据源[见Adding Datasource in Solrconfig]

其次,你可以外部化DIH配置成使用XInclude

我用这个办法一个单独的文件都使用本地配置文件并集中不同内核之间的连接。


例: solrconfig.xml中,添加:

<xi:include href="../../common-config/local.dih.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> 

local.dih.xml看起来像:

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> 
    <lst name="defaults"> 
    <str name="config">data-config.xml</str> 
    <lst name="datasource"> 
     <str name="name">mongo</str> 
     <str name="type">MongoDataSource</str> 
     <str name="database">myMongoDb</str> 
    </lst> 
    <lst name="datasource"> 
     <str name="name">psql</str> 
     <str name="driver">org.postgresql.Driver</str> 
     <str name="type">JdbcDataSource</str> 
     <str name="url">jdbc:postgresql://localhost:5432/myPsqlDb</str> 
     <str name="user">dbUser</str> 
     <str name="password">dbPassword</str> 
    </lst> 
    </lst> 
</requestHandler> 
+0

谢谢!这就是我一直在寻找的东西。 – Oyeme