Dynamic Solr能否处理来自表1、表2、表n等表的数据导入?

Dynamic Solr能否处理来自表1、表2、表n等表的数据导入?,dynamic,solr,data-import,Dynamic,Solr,Data Import,我有一个mysql数据库,数据表是根据分片规则命名的,这意味着名称有相同的前缀,例如:the_table_,并有一个数字作为后缀,因此表名将是the_table_1,the_table_2,the_table_3。当我们想要选择一行时,我们必须从sql select mod(primary_key_id,64)+1)中找到表后缀,切分规则,64是一个基数,这意味着我们有64个表 现在我们想使用Solr来索引表中的数据,但是Solr data-config.xml不支持动态名称的sql查询,所以有

我有一个mysql数据库,数据表是根据分片规则命名的,这意味着名称有相同的前缀,例如:the_table_,并有一个数字作为后缀,因此表名将是the_table_1,the_table_2,the_table_3。当我们想要选择一行时,我们必须从sql select mod(primary_key_id,64)+1)中找到表后缀,切分规则,64是一个基数,这意味着我们有64个表

现在我们想使用Solr来索引表中的数据,但是Solr data-config.xml不支持动态名称的sql查询,所以有什么建议来解决这个问题吗

像这样的事情

<entity name="audit" 
        query="select id,monitor_type,city,STATUS,is_history,timeout,author,author_uid,author_ip,operator_uid,operator,created_at,description from `main_table`">
        <field column="ID" name="id" />
        <field column="MONITOR_TYPE" name="monitor_type" />
        <field column="CITY" name="city" />
        <field column="STATUS" name="status" />
        <field column="IS_HISTORY" name="is_history" />
        <field column="AUTHOR" name="author" />
        <field column="AUTHOR_UID" name="author_uid" />
        <field column="AUTHOR_IP" name="author_ip" />
        <field column="OPERATOR_UID" name="operator_uid" />
        <field column="OPERATOR" name="operator" />

        <entity name="distribution" query="select mod(${audit.ID}, 256)+1 as table_id">
          <entity name="details" query="select content from detail${distribution.table_id} where id=${audit.ID}">
            <field column="CONTENT" name="content" />
          </entity>
        </entity>
</entity>


我将创建一个存储过程来执行您想要的操作,然后从Solr调用它。像这样的

CREATE PROCEDURE `GetAuditDetails`(IN auditID INT)
BEGIN
  DECLARE tableID INT DEFAULT 0;
  DECLARE sqlString VARCHAR(100) DEFAULT '';
  SELECT MOD(auditID, 256)+1 INTO tableID;
  SET @sqlString = CONCAT('select content from detail', tableID, ' where id=', auditID );
  PREPARE stmt FROM @sqlString;
  EXECUTE stmt;
END;

<entity name="audit" 
    query="select id,monitor_type,city,STATUS,is_history,timeout,author,author_uid,author_ip,operator_uid,operator,created_at,description from `main_table`">
        <field column="ID" name="id" />
        <field column="MONITOR_TYPE" name="monitor_type" />
        <field column="CITY" name="city" />
        <field column="STATUS" name="status" />
        <field column="IS_HISTORY" name="is_history" />
        <field column="AUTHOR" name="author" />
        <field column="AUTHOR_UID" name="author_uid" />
        <field column="AUTHOR_IP" name="author_ip" />
        <field column="OPERATOR_UID" name="operator_uid" />
        <field column="OPERATOR" name="operator" />

        <entity name="details" query="CALL GetAuditDetails(${audit.ID})">
           <field column="CONTENT" name="content" />
        </entity>
</entity>
创建过程“GetAuditDetails”(在试听INT中)
开始
声明tableID INT默认值为0;
声明sqlString VARCHAR(100)默认值“”;
在tableID中选择MOD(auditd,256)+1;
设置@sqlString=CONCAT('select content from detail',tableID',where id=',auditd);
从@sqlString准备stmt;
执行stmt;
结束;

首先,它不应该在嵌套项查询中使用audit.ID,而应该使用${audit.ID},否则会出现异常。 第二,对于Mysql过程:

CREATE PROCEDURE `GetAuditDetails`(IN auditID INT)
BEGIN
  DECLARE tableID INT DEFAULT 0;
  DECLARE sqlString VARCHAR(100) DEFAULT '';
  SELECT MOD(auditID, 256)+1 INTO tableID;
  SET @sqlString = CONCAT('select content from detail', tableID, ' where id=', auditID );
  PREPARE stmt FROM @sqlString;
  EXECUTE stmt;
END;

您是否考虑过使用MySQL视图为Solr准备数据?您是否尝试过使用占位符?类似于${dataimporter.tablename},您在调用dataimport url时传递tablename参数。虽然mysql过程有一些问题,但它确实解决了我的问题…谢谢Evan。。。