参考自:http://wiki.apache.org/solr/DataImportHandler
DataImportHandler 可以通过datasource数据源索引来自于HTTP的数据。包括REST/XML和RSS/ATOM 。
在版本1.4中,推荐使用URLDataSource。
配置示例如下:
<dataSource name="b" type="HttpDataSource" baseUrl="http://host:port/" encoding="UTF-8" connectionTimeout="5000" readTimeout="10000"/>
<!-- or in Solr 1.4-->
<dataSource name="a" type="URLDataSource" baseUrl="http://host:port/" encoding="UTF-8" connectionTimeout="5000" readTimeout="10000"/>
datasource的属性有:
baseUrl(可选):
you should use it when the host/port changes between
Dev/QA/Prod environments. Using this attribute isolates the changes to be made
to the solrconfig.xml
encoding(可选):定义响应头里面的编码方式。这个属性可以替换掉服务器的默认编码方式。
connectionTimeout(可选):默认时间是5000ms
readTimeout(可选):默认是10000ms
下面是一个data-config.xml示例的配置:
这是一个Slashdot RSS feed的例子。
<dataConfig>
<dataSource type="HttpDataSource" />
<document>
<entity name="slashdot"
pk="link"
url="http://rss.slashdot.org/Slashdot/slashdot"
processor="XPathEntityProcessor"
forEach="/RDF/channel | /RDF/item"
transformer="DateFormatTransformer">
<field column="source" xpath="/RDF/channel/title" commonField="true" />
<field column="source-link" xpath="/RDF/channel/link" commonField="true" />
<field column="subject" xpath="/RDF/channel/subject" commonField="true" />
<field column="title" xpath="/RDF/item/title" />
<field column="link" xpath="/RDF/item/link" />
<field column="description" xpath="/RDF/item/description" />
<field column="creator" xpath="/RDF/item/creator" />
<field column="item-subject" xpath="/RDF/item/subject" />
<field column="slash-department" xpath="/RDF/item/department" />
<field column="slash-section" xpath="/RDF/item/section" />
<field column="slash-comments" xpath="/RDF/item/comments" />
<field column="date" xpath="/RDF/item/date" dateTimeFormat="yyyy-MM-dd'T'hh:mm:ss" />
</entity>
</document>
</dataConfig>
看到这个东西的确有点迷糊,因此下面是我们索引wikipedia的例子:
下面这个data-config.xml是用于索引http://dumps.wikimedia.org/enwiki/20100312/
这个网页下的pages-articles.xml.bz2文件,我们需要去这个网页下载该文件,解压以后放到conf/data目录下,这个文件不压缩的大小是1.50GB。
<dataConfig>
<dataSource type="FileDataSource" encoding="UTF-8" />
<document>
<entity name="page"
processor="XPathEntityProcessor"
stream="true"
forEach="/mediawiki/page/"
url="/data/enwiki-20100312-pages-articles.xml"
transformer="RegexTransformer,DateFormatTransformer"
>
<field column="id" xpath="/mediawiki/page/id" />
<field column="title" xpath="/mediawiki/page/title" />
<field column="revision" xpath="/mediawiki/page/revision/id" />
<field column="user" xpath="/mediawiki/page/revision/contributor/username" />
<field column="userId" xpath="/mediawiki/page/revision/contributor/id" />
<field column="text" xpath="/mediawiki/page/revision/text" />
<field column="timestamp" xpath="/mediawiki/page/revision/timestamp" dateTimeFormat="yyyy-MM-dd'T'hh:mm:ss'Z'" />
<field column="$skipDoc" regex="^#REDIRECT .*" replaceWith="true" sourceColName="text"/>
</entity>
</document>
</dataConfig>
注意一下上面的url最好写绝对路径,我的相对路径老是出错-_-。
相关的schema.xml文件如下:
<field name="id" type="integer" indexed="true" stored="true" required="true"/>
<field name="title" type="string" indexed="true" stored="false"/>
<field name="revision" type="sint" indexed="true" stored="true"/>
<field name="user" type="string" indexed="true" stored="true"/>
<field name="userId" type="integer" indexed="true" stored="true"/>
<field name="text" type="text" indexed="true" stored="false"/>
<field name="timestamp" type="date" indexed="true" stored="true"/>
<field name="titleText" type="text" indexed="true" stored="true"/>
...
<uniqueKey>id</uniqueKey>
<copyField source="title" dest="titleText"/>
下面会花费数小时的时间去索引数据,并且内存使用率将持续最高,请注意很多wikipedia的文章都仅仅是指向其它文章$skipDoc(1.4)的使用可以使得这些文章被忽略,当然前提是正则表达式匹配。
请注意:由于目前唯一支持delta import的EntityProcessor是SqlEntityProcessor,而XPathEntityProcessor并现在没有实现delta import。如果你想实现这些方法的话,你需要修改EntityProcessor.java
分享到:
相关推荐
在处理HTTP中的XML数据时,Solr提供了XML/HTTP数据源,使得能够索引通过HTTP协议获取的RESTful或XML/RSS/ATOM格式的数据。 在Solr 1.4之前,XML/HTTP数据源被配置为`<dataSource>`类型为`HttpDataSource`。然而,从...
然后,在Solr的配置文件(如solrconfig.xml)中,你需要定义一个DIH的配置,包括数据源类型、查询语句、映射规则等。接着,设置定时任务的配置,例如定义一个cron表达式来指定数据导入的频率。 定时任务的触发可以...
Solr DataImport Handler 是Solr内置的一个特性,它允许从关系型数据库或其他数据源导入数据并建立索引。DIH通过XML配置文件定义数据源、查询、转换和加载过程,使得数据导入过程可定制化。 2. **Solr DataImport ...
使用 `solr-dataimport-scheduler`,你需要在 Solr 的配置文件中定义调度器和数据源,指定数据源的连接参数、查询语句以及导入的字段等。同时,你还需要配置调度器的触发时间和频率,这通常在 `solrconfig.xml` 和 `...
Solr 数据导入调度器(solr-dataimport-scheduler)是一个实用工具,用于自动化Apache Solr中的数据导入过程,尤其适用于需要定期从关系型数据库同步数据的场景。Solr 是一个流行的开源全文搜索引擎,它提供了强大的...
- 在`solr-server\SolrHome\core1\conf`下创建`db`目录,并在其中创建`db-data-config.xml`文件,配置数据源和数据库连接信息,例如: ```xml <?xml version="1.0" encoding="UTF-8"?> <dataConfig> ...
1. 定义DataConfig.xml:在solr/solr_home/collection/conf目录下创建DataConfig.xml文件,配置数据源、表名、主键以及增量导入的查询条件。 2. 配置Solr schema:确保Solr的Schema.xml文件包含了需要索引的所有...
接着,创建`data-config.xml`文件,定义数据源和数据实体。在这个例子中,我们将使用MySQL数据库,所以配置如下: ```xml <dataConfig> ...
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <str name="config">data-config.xml</str> </lst> </requestHandler> ``` 3. **加载...
2. 配置Solr的`data-config.xml`文件,指定数据源、数据表、查询语句以及字段映射。 3. 如果需要认证,要在配置文件中添加数据库连接的用户名和密码。 4. 启动定时任务,设置同步频率,这可能涉及到修改Solr的配置...
为了连接 MySQL,你需要在 Solr 的配置文件中添加数据源信息。编辑 `my_solr_instance/conf/solrconfig.xml` 文件,找到 `<dataSources>` 节点,并添加类似以下的 JDBC 数据源配置: ```xml <dataSources> url=...
Solr 8.2.0整合MySQL的过程主要包括安装部署、配置数据源、创建Core、设置数据映射、导入数据以及查询测试。这个过程能够让你的数据库中的数据具备强大的全文检索和分析能力,提高数据的可搜索性和用户体验。在实际...
7. **导入数据**:在`data-config.xml`中配置好数据源和查询后,可以通过Solr的管理界面或API执行数据导入操作。数据导入过程将根据`data-config.xml`中的配置从MySQL数据库抓取数据,并构建索引。 8. **使用Tomcat...
3. **运行 Full Import**: 使用 Solr 的管理界面或者通过 API 触发 Full Import,Solr 将执行 `data-config.xml` 中定义的指令,将数据导入索引。 4. **增量导入与 delta-import**: 如果数据源有更新,可以使用 ...
1. **创建 DataImportHandler (DIH)**: DIH 是 Solr 提供的一种工具,可以将外部数据源的数据导入到 Solr 索引中。在 `solrconfig.xml` 文件中启用并配置 DIH。 2. **配置 DataConfig.xml**: 这个文件定义了数据源...
Solr 提供了一种称为 Data Import Handler (DIH) 的功能,用于从外部数据源(如数据库或 CSV 文件)导入数据到 Solr 集合。 1. **上传 JAR 包**: ```shell curl -X POST -H 'Content-Type: application/octet-...
在这个例子中,`mytable` 实体从数据库中的 `mytable` 表导入数据,`deltaImportQuery` 用于增量更新,比较数据源的 `last_modified` 时间戳与 Solr 中记录的 `last_index_time`,只导入更新过的记录。 通过这样的...