以编程方式创建或导入Solr数据源。

问题描述 投票:1回答:2

我有一个模块化的应用程序,从本质上讲,这意味着在任何时候都可以启用或禁用一些或所有的部分,并且可以在任何时候添加或删除新的部分。

在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文件的脚本。

solr
2个回答
2
投票

请看一下 http:/wiki.apache.orgsolrSolrConfigXml#XInclude。href 也可以指向一个URL,当你的xml被solr访问时,这个URL会在飞行中生成。


0
投票

你可以使用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。

© www.soinside.com 2019 - 2024. All rights reserved.