一、什么是 Data Import Handler?
许多搜索应用存储了以结构化数据存储来创建索引的内容,例如关系数据库。Data Import Handler 提供了一种机制以便从数据存储中导入内容并为之建立索引。除了关系数据库,DIH 还能够为 HTTP 基础数据源(如 RSS 和 新闻摘要),邮件存储库和结构化 XML(XPath 处理器来生成域)。
二、基础概念和术语
1、Transformer(改造器):每一个有实体匹配的域集合可以选择性的被改造。这个过程可能会修改域,创建一个新的域或者将一个单行生成多行(或文档)。在 DIH 中有几个内置的改造器,它们可以用来修改日期和去除 HTML。我们也可以通过公共的接口写自定义的改造器。
2、Processor(处理器):实体处理器可以从数据源中提取内容,改造内容并添加到索引中。我们可以用自定义的实体处理器来扩展或代替系统提供的实体处理器。
3、Entity(实体):从概念上讲,实体会生成一个文档集合,包含了多个域。然后由 Solr 创建索引。对于关系数据库的数据源,一个实体可以是一张视图或表(可以由一个或多个 SQL 命令处理生成具有一个或多个列(域)的行(文档)集合。
4、Datasource(数据源):定义了数据的位置。对于一个数据库而言,它是数据库连接 DSN。对于 HTTP 而言,它是一个基地址(base URL)
三、配置
1、配置 solrconfig.xml
/path/to/my/DIHconfigfile.xml
唯一的必填参数是 config 参数,它指明了 DIH 配置文件的地址。该配置文件包含了数据源的说明:如何匹配数据,匹配哪些数据和如何处理数据以生成索引文档。
我们可以有多个 DIH 配置文件。每一个文件要求在 solrconfig.xml 中有一个独立的定义来指明文件路径。
2、配置 DIH 配置文件
下面的例子中提取了一个数据库中的四张表数据。
Datasource 也可以在 solrconfig.xml 文件中指定。但是一定要在 solrconfig.xml 文件处理器中的默认部分指定。然而,这些不会被解析知道主要的配置加载完成后。全部的配置也可以通过使用
dataConfig 参数解析为一个请求参数。当配置出现错误时,错误信息将以 XML 格式返回。
reload-config 命令对于验证一个新的配置文件时有用的,或者如果你想要指定一个文件,加载它,并且不想在导入时重新加载它。如果有一个 XML 错误在配置中,那么错误信息会以 xml 格式返回。我们可以解决这个问题然后执行 reload-config 命令。
3、请求参数
配置中的请求参数可以被占位符 ${dataimporter.request.paramname}
代替
然后,这些参数可以通过 full-import 命令设置或者定义在 solrconfig.xml 文件的 dataimport?command=full-import&jdbcurl=jdbc:hsqldb:./example-DIH/hsqldb/ex&jdbcuser=sa&jdbcpassword=secret
三、Data Import Handler 命令
DIH 命令通过 HTTP 请求发送到 Solr。
1、abort:终止正在执行的操作。格式:http://
solr/
dataimport?
command=abort
2、delta-import:用于增量导入和变化检查。格式: http://
solr/
dataimport?
command=delta-import。当 SqlEntityProcessor 支持增量导入时,它也可以像 full-import 一样支持清除,提交,优化和测试。
3、full-import:该命令将立即返回。这个操作将在一个新的线程中开始而且在响应中的 status 属性应该显示为 busy。这个操作执行的时间依赖于数据集的大小。在 full-import 期间查询不会被阻塞。当 full-import 命令执行时,该操作的开始时间将被存储在 conf/dataimport.properties 文件中。被存储的时间戳当 delta-import 命令执行时会用到。格式:
http://
solr/
dataimport?
command=full-import
4、reload-config:如果配置文件已经改变,我们又不想重启服务器,那么可以执行该命令。格式:http://
5、status:该命令返回被创建和删除的文档数量,查询信息,行匹配等。格式: http://
solr/
dataimport?
command=status
6、show-config:相应配置
一)、full-import 命令的参数:
1、clean:默认值为 true。表明在创建索引前是否清除以创建的索引
2、commit:默认值为 true。表明操作之后是否提交
3、debug:默认值为 false。以测试模式运行命令。它适用于交互式开发模式。注意:在测试模式下,文档是不会自动提交的。如果我们既想要运行测试模式又想自动提交,那么需要添加 commit=true 到请求到参数中。
4、entity:配置文件
5、optimize:默认值为 true。表明在操作后是否进行优化
6、synchronous:默认值为 false。表明如果导入没有完成那么将阻塞请求
四、属性写入
properWriter 元素为 delta 查询定义了数据格式和区域。它是一个可选的配置。直接添加到 DIH 配置文件的 dataConfig 元素中就行。
1、dateFormat:
如果需要将日期转换为文本,将使用java.text.SimpleDateFormat。默认格式为:yyyy-MM-dd HH:mm:ss
2、type:实现类。如果没有云设置将使用 SimplePropertiesWriter。如果使用云,将使用 ZKPropertiesWriter。如果没有指定,那么默认选择恰当的类,当然这依赖于云模型是否启用。
3、locale:区域,默认为 ROOT 区域。它必须指明那个国家的语言。
4、directory:默认值 conf。属性文件的目录
5、filename:属性文件的名称。如果没有定义,默认与 requestHandler 名称相同(在 solrconfig.xml 文件中定义)
五、数据源
数据源指明了数据的来源和类型。某些情况下,一些数据源由相关的实体处理器来配置。数据源也可以配置在 solrconfig.xml 中,当我们有多个不同的运行环境时(开发、测试和生产)这是非常有用的。
我们也可以通过编写继承 org.apache.solr.handler.dataimport.DataSource 的类来定制数据源。数据源的名称和类型是必须要设置的。数据源一共有:
1、contentStreamDataSource:
这个将 Post 数据作为数据源。实体处理器使用了
2、FieldReaderDataSource:
当数据库文件包含 XML 而且你希望使用 XPathEntityProcessor 时,使用该数据源。我们应该设置一个配置,JDBC 和 FieldReader 数据源,还有两个实体,格式如下:
...
从硬盘上的文件中匹配文档。