我有一个模块化的应用程序,从本质上讲,这意味着在任何时候都可以启用或禁用一些或所有的部分,并且可以在任何时候添加或删除新的部分。
在Solr的文档中,所有关于数据源的内容似乎都是埋在Solr目录中的XML文件中。
我还没有找到一个明显的方法来以编程方式添加到该索引中(不说修改那些原始文件)。我需要能够配置Solr在我启用的模块中寻找数据源。
大概让它遍历我的目录结构来寻找它们并不理想,所以我猜测一个明智的选择是以某种方式将solr指向一个.php文件(或任何其他脚本),它将返回一个包含每个模块数据源的单一格式化XML文件。我想,要做到这一点,我应该做一些类似下面的事情。
solr-config.xml
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">/var/www/site.com/data-config.php</str>
</lst>
</requestHandler>
data-config.xml - 并以编程方式创建1-n个文档,从每个模块中提取。
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/collection" user="root" password="***" batchSize="1" />
<document name="module_name">
<entity name="module_entity" query="SELECT * FROM module_table">
<field column="id" name="id" />
<field column="name" name="name" />
<field column="age" name="age" />
<field column="description" name="description" />
</entity>
</document>
</dataConfig>
我想这个方法应该能行,我明天回到合适的电脑前会试一试,但同时我想问问是否有更好的方法被我忽略了?
编辑:有人向我指出,把它指向PHP脚本只会读取文件,而不会执行,因此不会得到有效的XML。因此,更合适的方法是让cronjob执行一个建立XML文件的脚本。
请看一下 http:/wiki.apache.orgsolrSolrConfigXml#XInclude。 该 href
也可以指向一个URL,当你的xml被solr访问时,这个URL会在飞行中生成。
你可以使用data-config,它负责指定你想把数据带到solr的查询,它就像任何IDE和数据库之间的连接一样。
<dataConfig>
<dataSource type="JdbcDataSource" driver="org.postgresql.Driver" url="jdbc:postgresql://localhost:5433/postgres" user="consulta" password="12345"/>
<document >
<entity name="tables" pk="id" query="select id_geo,nom_geo,termino_generico from publicacion">
<field column="id_geo" name="id_geo"/>
<field column="nom_geo" name="nom_geo"/>
<field column="termino_generico" name="termino_generico"/>
</entity>
</document>
</dataConfig>
我目前正在solr 8.4.1的环境中工作,并从PostgreSQL中存储的数据馈送solr。