使用Apache Solr对数据库建立索引(包括处理CLOB、CLOB)(转)
以下资料整理自网络,觉的有必要合并在一起,这样方便查看。主要分为两部分,第一部分是对《db-data-config.xml》的配置内容的讲解(属于高级内容),第二部分是DataImportHandler(属于基础),第三部分是对db-data-config.xml的进阶(这个国内可能还没有人写过啊,我在google、baidu上都没有搜索到,最后可是拔代码,看solr的英文文档找的)
第一部分是对《db-data-config.xml》
query是获取全部数据的SQL
deltaImportQuery是获取增量数据时使用的SQL
deltaQuery是获取pk的SQL
parentDeltaQuery是获取父Entity的pk的SQL
Full Import工作原理:
执行本Entity的Query,获取所有数据;
针对每个行数据Row,获取pk,组装子Entity的Query;
执行子Entity的Query,获取子Entity的数据。
Delta Import工作原理:
查找子Entity,直到没有为止;
执行Entity的deltaQuery,获取变化数据的pk;
合并子Entity parentDeltaQuery得到的pk;
针对每一个pk Row,组装父Entity的parentDeltaQuery;
执行parentDeltaQuery,获取父Entity的pk;
执行deltaImportQuery,获取自身的数据;
如果没有deltaImportQuery,就组装Query
限制:
子Entity的query必须引用父Entity的pk
子Entity的parentDeltaQuery必须引用自己的pk
子Entity的parentDeltaQuery必须返回父Entity的pk
deltaImportQuery引用的必须是自己的pk
第二部分是DataImportHandler
关于DataImportHandler的具体使用方法,详见下文,如果你英文超级好,那看这个链接吧:http://wiki.apache.org/solr/DataImportHandler
大多数的应用程序将数据存储在关系数据库、xml文件中。对这样的数据进行搜索是很常见的应用。所谓的DataImportHandler提供一种可配置的方式向solr导入数据,可以一次全部导入,也可以增量导入。
概览
目标
? 能够读取关系数据库中的数据。
? 通过可配置的方式,能够将数据库中多列、多表的数据生成solr文档
? 能够通过solr文档更新solr
? 提供 通过配置文件就能够导入所有数据的能力
? 能够发现并处理 由insert、update带来的变化(我们假定在表中有一个叫做“last-modified的列”)
? 能够配置 “完全导入”和“增量导入”的时间
? 让读取xml文件,并建立索引成为可配置。
? 能够将 其他的数据源(例如:ftp,scp,etc)或者其他格式的文档(Json,csv)以插件的形式集成到项目中。
设计思路
这个Handler首先要在solrconfig.xml文件中配置下,如下所示。
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">/home/username/data-config.xml</str>
</lst>
</requestHandler>
从它的名字上,我们或许也可以猜到,
DataImportHandler正是requestHandler的实现。我们一共需要在两个地方配置文件中进行一些配置。
?solrconfig.xml 。 data-config.xml必须在这个文件中配置,datasource也可以。不过,一般将datasource放在data-config.xml文件中。
?data-config.xml
1. 1. 怎样获取数据?(查询语句、url等等)
2. 要读什么样的数据(关系数据库中的列、或者xml的域)
3. 做什么样的处理(修改/添加/删除)
跟关系数据库一起使用
下面几个步骤是必要的.
? 定义一个data-config.xml 文件,并这个它的路径配置到solrconfig.xml 中关于DataImportHandler的配置中。
? 给出Connection的信息(假设你选择在solrconfig中配置datasource)
?打开DataImportHandler页面去验证,是否该配置的都配置好了。http://localhost:8983/solr/dataimport
?使用“完全导入”命令将数据从数据库中导出,并提交给solr建立索引
?使用“增量导入”命令对数据库发生的变化的数据导出,并提交给solr建立索引。
配置数据源
将dataSource标签直接添加到dataConfig下面,即成为dataConfig的子元素.
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/dbname" user="db_username" password="db_password"/>
? 数据源也可以配置在solrconfig.xml中
?属性type 指定了实现的类型。它是可选的。默认的实现是JdbcDataSource。
?属性 name