DIH 之 FieldReaderDataSource 数据源

当一个数据库字段包含 XML 内容,打算通过 XpathEntityProcessor 来读取内容时,可以像以下
配置那样,设置一个数据源,同时包含
JDBC 和 FieldReader 两个实体:
&lt;dataSource name = &quot;a1&quot; driver=&quot;org.hsqldb.jdbcDriver&quot; /&gt;<br />
&lt;dataSource name=&quot;a2&quot; type=FieldReaderDataSource&quot; /&gt;<br />
&lt;!-- processor for database --&gt;<br />
&lt;entity name =&quot;e1&quot; dataSource=&quot;a1&quot; processor=&quot;SQLEntityProcessor&quot; pk=&quot;docid&quot;<br />
	query=&quot;select * from t1 ...&quot;&gt;<br />
	&lt;!-- nested XpathEntity; the field in the parent which is to be used for<br />
	Xpath is set in the 'datafield attribute inplace of the &quot;url&quot; attribute --&gt;<br />
	&lt;entity name=&quot;e2&quot;<br />
		dataSource=&quot;a2&quot;<br />
		processor=&quot;XPathEntityProcessor&quot;<br />
		dataField=&quot;e1.fieldToUseForXPath&quot;<br />
		&lt;!-- Xpath configuration follows --&gt;<br />
		...<br />
	&lt;/entity&gt;<br />
&lt;/entity&gt;

DIH 之 ContentStreamDataSource 数据源

ContentStreamDataSource 数据源是将 POST 提交过来的数据当做数据源,这个数据源可以被任何 EntityProcessor 的 DataSource 使用。

DIH 之数据源

数据源用于指定原始的数据和类型,数据源可以在实体处理类中指定,也可以在 solrconfig.xml 中指定。

可以自定义一个数据源,只要扩展自 org.apache.solr.handler.dataimport.DataSource 即可。
数据源定义中,名称和类型是必填的。
支持的数据源类型包括:
ContentStreamDataSource
FieldReaderDataSource
FileDataSource
JdbcDataSource
URLDataSource

full-import 参数

full-import 接受以下参数:
clean:
默认为true,告诉 Solr 在开始索引前是否情况已有索引
commit:
默认为true,告诉 Solr 操作完成后是否提交
debug:
默认为 false,设置该命令是否在调试模式下执行在,在调试模式下,文档不会自动提交,如果准备提交文档的话,需要带上 commit=true 这个 request 参数
entity:
用于指定配置文件中 <document> 标签下实体的名称,允许一次传多个entity名称,如果没有指定实体名称,所有的实体将被执行
optimize:
操作完成后是否优化索引,默认为true

document 和 field

document 是 solr 基本的信息单元,如果solr的索引库是一张数据库表的话,document 就是一条记录,field 表的字段,一个 document 由多个 field 构成。field 可以保存多种数据类型,就想数据库字段可以有各种类型:varchar、number等,一个 field 也有文本类型、字符串类型、浮点型,这些类型称之为 field type,这些 field type 就告诉 solr 怎么去索引和查询这个字段的数据。

Solr 构架

题目叫构架有点过了,不过想不到其他的,就先叫构架吧。假设要运行 Solr,首先需要一个 Solr 的 war 包,然后创建 SOLR_HOME。首先是启动 Solr 的 war 包,然后 solr 的 war 找到 SOLR_HOME ,根据里面的配置启动 solr,solr.war 和 SOLR_HOME 是分离的,这点和 eclipse 有点象,eclipse 是一个独立的平台,workspace 是一个个的配置实例。solr 也是这样的,Solr.war 是个平台,SOLR_HOME 是一个个的配置,这种分离的构建比较灵活了,切换配置和升级 solr.war 都比较方便,只要修改 solr.war 中 SOLR_HOME 的位置就行。

DIH 命令说明

abort:
中断正在执行的操作,通过访问这个 URL 就能执行这个操作
http://<host>:<port>/solr/dataimport?command=abort.
delta-import:
增量导入,命令URL :http://<host>:<port>/solr/dataimport?command=delta-import
full-import:
全部导入操作可以通过这个URL执行 http://<host>:<port>/solr/dataimport?command=full-import,这个命令会立即返回。这个命令会开启一个新线程,线程属性为 busy。这个命令会执行一段时间,主要看数据量的大小。此时查询依然可以运行。当这个命令开始执行时,会把执行时间保存到 conf/dataimport.properties 中,增量导入时,将导入这个时段以后的数据。
reload-config:
当配置文件改变时,想重现加载配置文件时,可以执行:http://<host>:<port>/solr/dataimport?command=reload-config
status:
URL 是 http://<host>:<port>/solr/dataimport?command=status,返回文档创建、删除和查询等数量的统计

DIH 配置

首先 DIH 需要在 solrconfig.xml 中注册:
&lt;requestHandler name=&quot;/dataimport&quot;<br />
class=&quot;org.apache.solr.handler.dataimport.DataImportHandler&quot;&gt;<br />
&lt;lst name=&quot;defaults&quot;&gt;<br />
&lt;str name=&quot;config&quot;&gt;/path/to/my/DIHconfigfile.xml&lt;/str&gt;<br />
&lt;/lst&gt;<br />
&lt;/requestHandler&gt;

可以有多个的 DIH 配置文件,每个需要单独定义在 solrconfig.xml ,主要是指定配置文件的路径。
DIH 配置文件中指定了数据源,怎样获取数据,以及如何处理这些数据并发送给 Solr 索引库。
在 example/example-DIH 目录下有几个 DIH 配置的示例文件,可以作为配置的参考。

DIH 的概念和术语

数据源(Datasource):

指定数据的来源。对于数据库来说,是个数据库连接;对于HTTP数据源来说,就是 URL。
实体(Entity):
使用是用来产地文档集合,包含多个字段,这些文档会发送给 Solr 索引。假设一个关系型数据库数据源,实体就是一个视图或表,通过一个 SQL 查询语句,可以从中得到一些行的集合,这些行会包含多个字段。
处理器(Processor):
一个处理器的任务是从数据源中抽取内容,转换它,并加入索引库。

使用 Data Import Handler 处理结构化数据

许多搜索引擎应用将需要索引的数据保存在结构化存储中,如关系型数据库。Data Import Handler (DIH) 提供一个机制来从结构化存储中导入数据并索引。除了关系型数据库,DIH 可以索引来自 HTTP 的数据源,如 RSS 和 ATOM feeds,电子邮件和结构化的 XML 文件。

DataImportHandler 的 jar 包没有在 Solr war 包中,需要手动添加到 Solr 的 lib 目录下,或者通过 solrconfig.xml 的 <lib> 指令来指定。

Copyright © All Rights Reserved · Green Hope Theme by Sivan & schiy · Proudly powered by WordPress   闽ICP备18020075号-1