Solr dataimport 动态更改数据源

Posted

技术标签:

【中文标题】Solr dataimport 动态更改数据源【英文标题】:Solr dataimport change dataSource dynamically 【发布时间】:2014-10-02 23:12:03 【问题描述】:

我已经使用ucanaccess从大约 20 个 mdb 文件中进行了以下数据导入设置:

<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<dataSource name="a" driver="net.ucanaccess.jdbc.UcanaccessDriver" type="JdbcDataSource" url="jdbc:ucanaccess://E:/feqh/main.mdb;memory=false" />

<dataSource name="a1" driver="net.ucanaccess.jdbc.UcanaccessDriver" type="JdbcDataSource" url="jdbc:ucanaccess://E:/feqh/A/1.mdb;memory=false" />
<dataSource name="a2" driver="net.ucanaccess.jdbc.UcanaccessDriver" type="JdbcDataSource" url="jdbc:ucanaccess://E:/feqh/A/2.mdb;memory=false" />
<dataSource name="a3" driver="net.ucanaccess.jdbc.UcanaccessDriver" type="JdbcDataSource" url="jdbc:ucanaccess://E:/feqh/A/3.mdb;memory=false" />
<dataSource name="a4" driver="net.ucanaccess.jdbc.UcanaccessDriver" type="JdbcDataSource" url="jdbc:ucanaccess://E:/feqh/A/4.mdb;memory=false" />
<!-- and so on -->

<document>
    <entity name="Book" dataSource="a"
            query="select bkid AS id, bkid AS BookID,bk AS BookTitle, betaka AS BookInfo, cat as cat from 0bok">
                   <field column="id" name="id"/>
                   <field column="BookID" name="BookID"/>
                   <field column="BookTitle" name="BookTitle"/>
                   <field column="cat" name="cat"/>    
        <entity name="Category" dataSource="a"
                query="select name as CatName, catord as CatWeight, Lvl as CatLevel from 0cat where id = $Book.CAT">
                    <field column="CatName" name="CatName"/>
                    <field column="CatWeight" name="CatWeight"/>
                    <field column="CatLevel" name="CatLevel"/>
        </entity>

        <entity name="Pages" dataSource="a5" onError="continue"
                query="SELECT nass AS PageContent, page AS pageNum FROM b$Book.ID ORDER BY page">
                <field column="PageContent" name="PageContent" />
                <field column="PageNum" name="PageNum" />
                <entity name="Titles" dataSource="a5" onError="continue"
                    query="SELECT * FROM t$Book.ID WHERE id = $Pages.PAGE ORDER BY sub">
                        <field column="ID" name="TitleID"/>
                        <field column="TIT" name="PageTitle"/>
                        <field column="SUB" name="TitleWeight"/>
                        <field column="LVL" name="TitleLevel"/>
                </entity>
        </entity>


    </entity>
  </document>
</dataConfig>

每次我喜欢从不同的 dataSource 导入时,我都必须手动更改 Pages 和 Titles 实体的 dataSource 属性,然后在不清理的情况下执行数据导入。现在有超过 600 个 mdb 文件,这不是一个明智的选择。有没有办法在配置中进行循环?换句话说:有一个主要实体或 mdb 文件来处理所有书籍的标题和类别,然后每本书都有自己的 mdb 文件,并以其 id 命名,例如 245.mdb 用于 id 245 的书,所以我需要更改数据源动态显示页面和标题。

【问题讨论】:

在我看来,您应该有一个 .mdb,其中包含所有数据的书籍、类别和页表。为每本书的页面设置单独的文件不会随着您添加更多书籍而扩展。另外,您能否将所有这些数据移到 Microsoft Access 以外的其他地方? @orangepips 我已经尝试搜索任何将 MS Access 数据库转换为 mysql 的工具,但想法相同,我必须手动操作 600 多个 mdb 文件!目前,如果我没有直接的 Solr 解决方案,我计划制作一个自动化该过程的 php 应用程序,但我需要知道如何通过 HTTP 进行非干净数据导入。 【参考方案1】:

你不能循环创建dataSources,但我相信你可以在a parameter variable中传递dataSource信息。因此,也许您可​​以在 Solr 之外循环您的集合,然后使用正确的源作为参数变量触发 DIH。

只要确保在同步模式下运行DIH,以避免不同的调用相互踩踏(我认为参数是syncMode

【讨论】:

以上是关于Solr dataimport 动态更改数据源的主要内容,如果未能解决你的问题,请参考以下文章

solr配置DataImport连接MySQL8数据库注意:

为 jdbc 数据直接 sqlserver 驱动程序覆盖 org.apache.solr.handler.dataimport.JdbcDataSource

solr配置DataImport连接MySQL8数据库注意:

Solr-5.3.1 dataimport 导入mysql数据

Solr 配置连接数据库

org.apache.solr.handler.dataimport.DataImportHandlerException: Data Config problem: 对实体 &quot;ch