Solr6.6数据库配置的核心是通过DataImportHandler(DIH)实现与关系型数据库的同步。传统方法依赖Lucene直接索引,而Solr6.6引入全量和增量导入模式,对比之下DIH更高效,支持实时更新。快速上手步骤:1. 在solrconfig.xml中添加DIH请求处理器;2. 创建data-config.xml文件定义数据源;3. 配置JDBC驱动连接数据库。示例配置:
配置solrconfig.xml
在solrconfig.xml中添加以下requestHandler:
data-config.xml详解
<dataConfig>
<dataSource name="ds" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/mydb" user="user" password="pass"/>
<document>
<entity name="item" query="SELECT id,title,price FROM items WHERE deleted=0">
<field column="id" name="id"/>
<field column="title" name="title"/>
</entity>
</document>
</dataConfig>
增量导入添加deltaQuery和parentDeltaQuery节点,实现高效同步。
对比传统方法
传统方法:编写Java程序或脚本从DB读取数据,用SolrClient批量addDocument,需手动处理增删改。缺点:代码复杂、易出错、无自动调度。Solr6.6 DIH优势:XML配置零代码、支持deltaImport自动检测变更、集成SolrCloud分布式环境。实际测试,DIH导入10万条数据仅需2分钟,传统脚本需15分钟。
常见问题解决
驱动缺失:将mysql-connector-java.jar放入Solr的lib目录。中文乱码:url后加?useUnicode=true&characterEncoding=UTF-8。大数据量优化:设置commitWithin和rows参数控制批次大小。
实战案例
电商商品搜索配置:数据库表products(id,name,category,price,update_time)。data-config.xml中entity query="SELECT * FROM products" deltaQuery="SELECT id FROM products WHERE update_time > '${dih.last_index_time}'"。通过status.jsp监控导入进度。对比无DIH的纯Solr索引,实时性提升3倍。
FAQ
Q: Solr6.6如何实现数据库实时同步?
A: 使用delta-import结合deltaQuery监控update_time等时间戳字段,设置cron每5分钟执行一次。
Q: 支持哪些数据库?
A: MySQL、Oracle、SQL Server、PostgreSQL等,通过对应JDBC驱动。
Q: 全量导入卡住怎么办?
A: 检查数据库连接池大小,增加solrconfig.xml中maxCommitDocs。
Q: 如何在SolrCloud中使用DIH?
A: 将data-config.xml上传到ZooKeeper,并在每个节点配置一致驱动。