多表利用DIH批量导入数据并建立索引注意事项

简介:

 如果希望同时对多个表进行全文检索,那我们该如何处理呢?利用DIH导入数据并建立索引时。schema.xml中配置了uniqueKey为id

<uniqueKey>id</uniqueKey>

  如果多表主键都为id的话索引会被覆盖

复制代码
    <!--deltaImportQuery和deltaQuery为增量导入时使用。-->
    <entity name="case"  
      pk="id"
      query="SELECT id,title, summary, 'case' as type FROM case"
      deltaImportQuery="SELECT id, title, summary, 'case' as type from case WHERE id='${dih.delta.id}'"
      deltaQuery="SELECT id, title, summary, 'case' as type FROM case  WHERE create_time > '${dih.last_index_time}'"
      >
      <!--field用于配置schema.xml中field和数据库字段的对应关系。column:数据库中字段名称,name:schema.xml中配置的名称-->
      <field column="id" name="id"/>
      <field column="title" name="title"/>       
      <field column="summary" name="summary"/>  
    </entity>

    <!--deltaImportQuery和deltaQuery为增量导入时使用。-->
    <entity name="casetest"  
      pk="id"
      query="SELECT id,title, summary, 'case_test' as type FROM casetest"
      deltaImportQuery="SELECT id, title, summary, 'case_test' as type from casetest WHERE id='${dih.delta.id}'"
      deltaQuery="SELECT id, title, summary, 'case_test' as type FROM casetest  WHERE create_time > '${dih.last_index_time}'"
      >
      <!--field用于配置schema.xml中field和数据库字段的对应关系。column:数据库中字段名称,name:schema.xml中配置的名称-->
      <field column="id" name="id"/>
      <field column="title" name="title"/>       
      <field column="summary" name="summary"/>
      <field column="type" name="type"/>
    </entity>
复制代码

  由于id是唯一键,如果id重复索引会被覆盖掉。此时可以加个简易的标识,以便构造不同表的uniqueKey

  修改后配置文件

复制代码
    <!--deltaImportQuery和deltaQuery为增量导入时使用。-->
    <entity name="case"  
      pk="id"
      query="SELECT concat('case_Type_', id) as id,title, summary, 'case' as type FROM case"
      deltaImportQuery="SELECT concat('case_Type_', id) as id, title, summary, 'case' as type from case WHERE id='${dih.delta.id}'"
      deltaQuery="SELECT concat('case_Type_', id) as id, title, summary, 'case' as type FROM case  WHERE create_time > '${dih.last_index_time}'"
      >
      <!--field用于配置schema.xml中field和数据库字段的对应关系。column:数据库中字段名称,name:schema.xml中配置的名称-->
      <field column="id" name="id"/>
      <field column="title" name="title"/>       
      <field column="summary" name="summary"/>  
    </entity>

    <!--deltaImportQuery和deltaQuery为增量导入时使用。-->
    <entity name="casetest"  
      pk="id"
      query="SELECT concat('case_test_Type_', id) as id,title, summary, 'case_test' as type FROM casetest"
      deltaImportQuery="SELECT concat('case_test_Type_', id) as id, title, summary, 'case_test' as type from casetest WHERE id='${dih.delta.id}'"
      deltaQuery="SELECT concat('case_test_Type_', id) as id, title, summary, 'case_test' as type FROM casetest  WHERE create_time > '${dih.last_index_time}'"
      >
      <!--field用于配置schema.xml中field和数据库字段的对应关系。column:数据库中字段名称,name:schema.xml中配置的名称-->
      <field column="id" name="id"/>
      <field column="title" name="title"/>       
      <field column="summary" name="summary"/>
      <field column="type" name="type"/>
    </entity>
复制代码





本文转自秋楓博客园博客,原文链接:http://www.cnblogs.com/rwxwsblog/p/5053320.html,如需转载请自行联系原作者
目录
相关文章
MySQL单表数据不要超过500万行:是经验数值,还是黄金铁律?
原文地址:梁桂钊的博客 博客地址:http://blog.720ui.com 欢迎关注公众号:「服务端思维」。一群同频者,一起成长,一起精进,打破认知的局限性。 今天,探讨一个有趣的话题:MySQL 单表数据达到多少时才需要考虑分库分表?有人说 2000 万行,也有人说 500 万行。
20739 0
|
11月前
|
存储 Shell Linux
用户和用户组
本文介绍了Linux系统中的用户账户和组的基本概念,包括普通用户和超级用户(root)的定义和区别,以及组的概念和作用。文章还详细描述了用户账户和组的相关文件(如/etc/passwd、/etc/shadow、/etc/group和/etc/gshadow)的结构和内容,并提供了创建和删除用户账户及组的基本命令和选项。
544 2
|
12月前
|
关系型数据库 MySQL Linux
Docker安装Mysql5.7,解决无法访问DockerHub问题
当 Docker Hub 无法访问时,可以通过配置国内镜像加速来解决应用安装失败和镜像拉取超时的问题。本文介绍了如何在 CentOS 上一键配置国内镜像加速,并成功拉取 MySQL 5.7 镜像。
1943 3
Docker安装Mysql5.7,解决无法访问DockerHub问题
|
SQL 存储 关系型数据库
6本值得推荐的MySQL学习书籍
本文是关于MySQL学习书籍的推荐,作者在DotNetGuide技术社区和微信公众号收到读者请求后,精选了6本值得阅读的MySQL书籍,包括《SQL学习指南(第3版)》、《MySQL是怎样使用的:快速入门MySQL》、《MySQL是怎样运行的:从根儿上理解MySQL》、《深入浅出MySQL:数据库开发、优化与管理维护(第3版)》以及《高性能MySQL(第4版)》和《MySQL技术内幕InnoDB存储引擎(第2版)》。此外,还有12本免费书籍的赠送活动,涵盖《SQL学习指南》、《MySQL是怎样使用的》等,赠书活动有效期至2024年4月9日。
3828 0
|
12月前
|
机器学习/深度学习 计算机视觉
一文详解残差网络
残差网络(ResNet)源于2016年的论文《Deep Residual Learning for Image Recognition》,旨在解决深层网络中的梯度消失和爆炸问题。通过引入残差块,即在网络中添加跳跃连接,使得信息可以直接跨过多层传递,从而有效解决了网络加深导致的训练困难。ResNet不仅显著提高了模型性能,还促进了深度学习领域的发展。
1598 3
|
12月前
|
设计模式 Java
Java“不能转换的类型”解决
在Java编程中,“不能转换的类型”错误通常出现在尝试将一个对象强制转换为不兼容的类型时。解决此问题的方法包括确保类型间存在继承关系、使用泛型或适当的设计模式来避免不安全的类型转换。
1329 7
|
缓存 Linux C语言
C语言 多进程编程(六)共享内存
本文介绍了Linux系统下的多进程通信机制——共享内存的使用方法。首先详细讲解了如何通过`shmget()`函数创建共享内存,并提供了示例代码。接着介绍了如何利用`shmctl()`函数删除共享内存。随后,文章解释了共享内存映射的概念及其实现方法,包括使用`shmat()`函数进行映射以及使用`shmdt()`函数解除映射,并给出了相应的示例代码。最后,展示了如何在共享内存中读写数据的具体操作流程。
|
SQL NoSQL 关系型数据库
TX-LCN分布式事务(1)
TX-LCN分布式事务(1)
264 1
|
自然语言处理 开发者
《黑神话:悟空》的剧情脚本与对话系统设计
【8月更文第26天】在《黑神话:悟空》这款游戏中,引人入胜的故事情节和丰富多样的对话系统是吸引玩家的关键因素之一。本文将详细介绍游戏剧情脚本的编写过程以及交互式对话系统的实现技术。
578 0
|
数据采集 SQL 监控
大数据清洗的艺术:有效处理缺失值、异常值与重复数据
【4月更文挑战第8天】本文探讨了大数据清洗的三个关键环节:缺失值处理、异常值识别与处理、重复数据消除。在处理缺失值时,涉及识别、理解原因、选择删除、填充或保留策略,并进行结果验证。异常值识别包括统计方法、业务规则和可视化检查,处理策略包括删除、修正和标记。重复数据的识别基于主键和关键属性,处理策略有删除、合并和哈希,处理后需持续监控。数据清洗是一门艺术,需要结合统计学、编程技能和业务理解。
3423 2