关于solr--多表插入索引覆盖问题

在Solr中,通过DataImportHandler从MySQL导入数据时,若多个表的ID字段相同,会导致索引覆盖。解决方法是在SQL查询中为每个表的ID字段添加唯一前缀,如在product表的PID前添加'book_',确保索引的唯一性,同时不改变数据库中的原始ID。

问题描述:如果在solr中添加数据库中表数据:在solrhome中配置solrconfig.mxl文件,添加一个requestHandler

 <requestHandler name="/dataimport"

class="org.apache.solr.handler.dataimport.DataImportHandler">

    <lst name="defaults">

      <str name="config">data-config.xml</str>

     </lst>

  </requestHandler> 

创建一个data-config.xml,保存到solrhome下的一个solrcore---->collection1\conf\目录下加入如下配置(

solrcore相当于mysql中一个数据库


<?xml version="1.0" encoding="UTF-8" ?>  

<dataConfig>   

<dataSource type="JdbcDataSource"   

  driver="com.mysql.jdbc.Driver"   

  url="jdbc:mysql://localhost:3306/lucene"   

  user="root"   

  password="root"/>   

<document>   

<entity name="product" query="SELECT pid,name,catalog_name,price,description,picture FROM products ">

 <field column="pid" name="id"/>

 <field column="name" name="product_name"/>

 <field column="catalog_name" name="product_catalog_name"/>

 <field column="price" name="product_price"/>

 <field column="description" name="product_description"/>

 <field column="picture" name="product_picture"/>

</entity>   

</document>   


这样重启tomcat--->选中collection1------>dataimport添加数据库索引即可,但是如果添加另外一张表id也是从1开始,则继续引入索引,会覆盖原原有相同id的索引。想要解决这个问题


需要将这个sql语句进行如下修改即可 将原有的pid的sql语句改为concat("book_",pid)


得到的结果为


可以看出这样在索引前加上前缀,则课解决id重复问题,就不会在覆盖原有的索引,并且,此时数据库的id并没有改变,只是将索引id更改






评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值