以solr4.6.1为例说明。
一、准备工作
1. 拷贝solr-dataimporthandler-4.6.1.jar到Tomcat的Solr lib目录中
在下载的solr的相关目录,如C:\Software\solr-4.6.1\dist中将solr-dataimporthandler-4.6.1.jar拷贝到C:\Software\apache-tomcat-7.0.50\webapps\solr\WEB-INF\lib 中。
并确保mysql的驱动包在Tomcat\lib目录下。
2. 假设在Solr Home(C:\solr-tomcat\solr)中现在有一个Solr core实例,名字为“item”(C:\solr-tomcat\solr\item)当然你可以使用你已有的core实例,或者是新建一个core实例。
二、solrconfig.xml中配置DataImportHandler
修改位于C:\solr-tomcat\solr\item\conf下的solrconfig.xml,加入如下内容:
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">C:\solr-tomcat\solr\item\conf\data-config.xml</str> </lst> </requestHandler>
注意C:\solr-tomcat\solr\item\conf\data-config.xml前一定不能有空格,否则会出现“找不到相关资源”类似的Exception:Can't find resource ' C:\solr-tomcat\solr\item\conf\data-config.xml ' in classpath or 'C:\solr-tomcat\solr\item\conf'
三、在solrconfig.xml同级目录中,即在C:\solr-tomcat\solr\item\conf中,增加上面的data-config.xml
在其中定义数据源,定义实体类。
<dataSource name="solrDB" type="JdbcDataSource" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/solr" user="root" password="tools2013"/>
<document>
<entity dataSource="solrDB" name="solr_item" query="select * from solr_item">
<field column="ID" name="id"/>
<field column="NAME" name="name"/>
<field column="POPULRITY" name="popularity"/>
</entity>
</document>
</dataConfig>
注意:1. URL中 jdbc:mysql://localhost/solr中不能有端口号。
2. 需要将数据库的驱动包放在Tomcat的lib目录下。
3. 将url,username和password换成相应的url,username,password.
4. 其中jdbc:mysql://localhost/solr中的solr是数据库名
5. 其中solr_item是表名。
四、需要在Schema.xml中定义不存在的field的信息(本例中除id外的field都不存在,所以都需要定义):
<field name="POPULRITY" type="string" indexed="true" stored="true" omitNorms="true"/> <field name="NAME" type="string" indexed="true" stored="true" omitNorms="true"/>
五、访问solr管理页面,点击collection item中的Dataimport,你会发现Dataimport中有了刚刚配置的DataImporthandler相关的信息。
勾选实体类并勾选commmit及optimize然后点击execute即开始执行导入。也可以选择进行full-import或者是delta-import.
六、当然你也可以通过代码的方式来进行full-import或者是delta-import. 如下是相关的代码示例。
1. full import:需要注意的是full import将会删除之前所有的索引并重新做索引,所以当数据量大的时候,性能会比较低,善用。
代码片段为:
1)AbstractSolrServer类用于构建Solr的连接
package com.wsheng.solr; import org.apache.solr.client.solrj.SolrServer; import org.apache.solr.client.solrj.impl.HttpSolrServer; /** * @author Josh Wang(Sheng) * * @email josh_wang23@hotmail.com */ public class AbstractSolrServer { /**TODO: Using Spring injection*/ public static SolrServer server; static { server = new HttpSolrServer("http://localhost:9898/solr/item"); // 其中item为solr core } }
package com.wsheng.solr.command; import com.wsheng.solr.AbstractSolrServer; import com.wsheng.solr.util.HttpUtils; /** * The API also should be moved to ISolrActionService * * @author Josh Wang(Sheng) * * @email josh_wang23@hotmail.com */ public class SolrImport extends AbstractSolrServer { private static String CONFIGURATION_URL = "http://localhost:9898/solr/item/dataimport"; private static String FULL_IMPORT_URL = "http://localhost:9898/solr/item/dataimport?command=full-import"; private static String DELTA_IMPORT_URL = "http://localhost:9898/solr/item/dataimport?command=delta-import"; public static String verify() throws Exception { return HttpUtils.handleSolrReq(CONFIGURATION_URL); } public static void fullImport() throws Exception { String result = HttpUtils.handleSolrReq(FULL_IMPORT_URL); System.out.println("Import Ended " + result); } public static void deltaImport() throws Exception { String result = HttpUtils.handleSolrReq(DELTA_IMPORT_URL); System.out.println("Import Ended " + result); } }
package com.wsheng.solr.util; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.WebResource; /** * @author Josh Wang(Sheng) * @email swang6@email.com */ public class HttpUtils { private static Log logger = LogFactory.getLog(HttpUtils.class); public static String handleSolrReq(String url) throws Exception { Client client = Client.create(); WebResource webResource = client.resource(url); ClientResponse response = webResource.accept("application/json").get(ClientResponse.class); if (response.getStatus() != 200) { logger.error("Failed...." + response.getStatus()); System.out.println("Failed...." + response.getStatus() + " " + response.getEntity(String.class)); throw new RuntimeException("Failed : HTTP error code : " + response.getStatus()); } String result = response.getEntity(String.class); return result; } }
@Test public void fullImport() { try { // full Import will re-index and replace the former ones SolrImport.fullImport(); this.query(); System.out.println("============="); this.queryByManu(); } catch (Exception e) { e.printStackTrace(); } }执行该Unit Test即可完成索引的索引的全部删除与重新构建。
PS:每次在run玩full-import后可查看solr home下相关index目录中文件的变化:如本例中可查看C:\solr-tomcat\solr\item\data\index folder下文件的修改时间。
2、关于增量索引可访问另一篇博文: Solr 4.x 定时、实时增量索引 - 修改、删除和新增索引
相关推荐
为了保持索引与源数据的一致性,Solr引入了DIH,这是一个内建的机制,用于从关系数据库、XML文件等外部数据源导入数据,并将其转化为Solr可以处理的索引格式。 数据导入调度器(Data Import Scheduler)是DIH的一个...
全量索引是指将整个数据集插入 Solr 索引库中,一般用于第一次创建索引的情况。在这种情况下,我们需要将所有数据从数据源中提取出来,然后将其插入 Solr 索引库中。全量索引的优点是可以快速地创建索引,但其缺点是...
1. **全量导入**:全量导入是将所有数据从源数据库或文件一次性导入到Solr索引的过程。这通常在系统初始化或者数据大幅度变动时进行。 2. **增量导入**:增量导入只导入自上次导入以来发生变化的数据。Solr通过跟踪...
`Solr DataImportHandler`(DIH)是 Solr 内置的一个功能,用于从关系型数据库或其他数据源导入数据,并建立索引。DIH 提供了全量和增量数据导入的功能,使得 Solr 能够保持与源数据的同步。`solr-dataimport-...
这个jar包的核心功能是DataImportHandler(DIH),它是一个内置在Solr中的模块,用于将外部数据源(如关系型数据库)的数据导入到Solr索引中。DIH支持全量导入和增量导入,这使得Solr可以保持与数据库的实时同步,...
在传统的Solr全量导入过程中,所有的数据都会被重新导入,这在数据量大或者频繁更新的场景下效率较低且可能导致服务短暂中断。因此,Solr-dataimportscheduler插件应运而生,它的核心作用就是实现对Solr索引的增量...
在Solr6版本中,DataImportHandler(DIH)是一个非常重要的特性,它允许Solr从外部数据源导入数据并建立索引。在"solr6--solr-dataimporthandler-scheduler-1.1"这个项目中,我们关注的重点是DIH的调度功能,也就是...
《跟益达学Solr5之从MySQL数据库导入数据并索引》这篇文章主要探讨了如何使用Apache Solr 5从MySQL数据库中导入数据并建立索引,以便进行高效的全文搜索。Solr是一款强大的开源搜索服务器,它提供了丰富的查询语言、...
它们是DIH的核心,负责解析配置、执行SQL查询、转换数据并将其导入到Solr索引中。 3. **solr-dataimporthandler-extras-8.9.0.jar:** 这个额外的JAR文件包含了一些扩展的DIH功能,如对特定数据库的支持、自定义...
数据导入(DataImportHandler, DIH)是Solr的一项功能,允许从各种数据源(如关系型数据库、CSV文件等)导入数据,并创建或更新索引。DIH支持全量导入和增量导入,使得在数据发生变化时,Solr能够快速反映这些变化。...
`solr-dataimporthandler-6.5.1.jar` 是Solr DataImportHandler的核心库,用于从外部数据源如数据库或文件系统导入数据。DataImportHandler(DIH)是一个强大的工具,允许Solr与各种数据源进行交互,将这些数据转换...
这有助于保持 Solr 索引与数据库或其他数据源之间的同步,确保搜索结果的准确性和时效性。 要使用此插件,首先需要将其添加到 Solr 的 lib 目录下,然后在 Solr 的配置文件中进行相应的配置。配置通常包括指定数据...
在传统的全量索引中,Solr会一次性将所有数据库数据导入索引。然而,随着数据的不断增长,全量索引不仅耗时,而且可能对系统造成较大压力。增量索引则只对新插入、更新或删除的数据进行索引,显著提高了效率和性能。...
这对于大数据量的系统尤其重要,因为它避免了全量索引的高成本和时间消耗。 3. **Solr的两种增量更新方式** - **Delta Import**:这种方式是通过跟踪数据库的变更日志(如MySQL的binlog或Oracle的redo log)来确定...
创建并配置好Core后,通过Solr的DataImportHandler执行全量或增量数据导入。在管理界面的Core操作中,选择`Dataimport`,然后点击`Execute Full Import`按钮。这将读取`data-config.xml`中的配置,从MySQL中抽取数据...
5. **监控和更新**: 一旦数据导入完成,你可以定期运行增量或全量更新,以保持Solr索引与MongoDB数据的同步。MongoDB Importer支持实时或定时的增量导入,确保搜索结果始终是最新的。 6. **优化性能**: 根据数据量...
DIH支持多种数据源,如关系型数据库、CSV文件等,并提供了全量导入和增量导入两种方式。全量导入会重新创建整个索引,而增量导入则只添加或更新自上次导入以来发生变化的数据。 `apache-solr-dataimportscheduler....
DataImportHandler-Scheduler 插件则增强了这个功能,它允许用户设定定时任务,自动监测数据源的变化,并仅导入新的或更新的数据,从而减少了不必要的全量索引重建,提高了系统的性能和响应速度。 在源码包 "solr-...