Solr DataImport:管理不同环境的配置(开发/暂存/生产)

时间:2012-06-28 10:53:18

标签: solr dataimporthandler

SolR DataImportHandler的配置文件包含针对数据库运行的SQL查询,如何将结果列映射到SolR文档字段,当然还包括连接到数据库所需的参数。

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

有没有办法将数据库连接参数(特别是密码)与SQL语句和声明分开配置,因此每个配置都只维护一次?

2 个答案:

答案 0 :(得分:4)

实际上可以使用标准的solr配置来完成。

首先,您需要在solrconfig.xml中定义数据源[请参阅Adding Datasource in Solrconfig]

其次,您可以使用XInclude

将DIH配置外部化为单独的文件

我使用这种方法既可以使用本地配置文件,也可以集中跨不同内核的连接。


实施例: 在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>  

答案 1 :(得分:2)

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

如果您查看Solr文档,或者在Solr Entreprise Server上,他们说您可以使用带有key = value的core1.properties并在xml配置文件中使用key ...但根据我的经验,它不会工作。我已经尝试了几种方法,在solr邮件列表上有关于此问题的未解决的问题。

因此,您必须采用丑陋的变通方法(例如使用模板xml文件并将#password#替换为真实密码等)。