SolR DataImportHandler 的配置文件包含对数据库运行的 SQL 查询、如何将结果列映射到 SolR 文档字段,当然还有连接到数据库所需的参数。
在我们的项目中,数据库连接参数(特别是数据库密码)因环境而异,这迫使我们为每个环境维护一个稍微不同的整个配置 XML 文件的副本。
有没有办法将数据库连接参数(特别是密码)与 SQL 语句和声明分开配置,这样每个配置都只维护一次?
SolR DataImportHandler 的配置文件包含对数据库运行的 SQL 查询、如何将结果列映射到 SolR 文档字段,当然还有连接到数据库所需的参数。
在我们的项目中,数据库连接参数(特别是数据库密码)因环境而异,这迫使我们为每个环境维护一个稍微不同的整个配置 XML 文件的副本。
有没有办法将数据库连接参数(特别是密码)与 SQL 语句和声明分开配置,这样每个配置都只维护一次?
实际上,这可以使用标准的 solr 配置来完成。
首先,您需要在 solrconfig.xml 中定义您的数据源 [参见在 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>
这是 Solr 中的一个已知问题。
如果您查看 Solr 文档或 Solr Entreprise Server book,他们说您可以使用 key=value 的 core1.properties 并在您的 xml 配置文件中使用 key ...但根据我的经验,它不起作用。我已经尝试了几种方法,solr 邮件列表上有关于此的未解决问题。
因此,您必须求助于丑陋的解决方法(例如使用模板 xml 文件并将 #password# 替换为真实密码等)。