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

时间:2013-05-22 21:42:28

标签: solr

我有一个模块化应用程序,它本质上意味着一次启用或禁用部分或全部部件,并且可以随时添加或删除新部件。

查看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文件的脚本吗?

2 个答案:

答案 0 :(得分:2)

请查看http://wiki.apache.org/solr/SolrConfigXml#XInclude href也可以指向一个URL,该URL会在SOLR访问时动态生成您的xml。

答案 1 :(得分: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。