solr学习第七课----solr之数据库数据导入生成索引(DataImportHandler)-基于solr搜索引擎
2013-11-19 12:31
746 查看
写程序可以将数据读出100条,如果你的内存够大,可以是1000条甚至更多,然后放入Collection中,批量提交至solr。或者读取数据写入xml文件中,再将该文件提交到solr等等。但是,我们还可以通过配置文件直接读取数据库建立索引。
两种方式:1) 全量更新索引 2) 增量更新索引
其中: 关于全量和增量测试报告详见以下URL:
http://download.csdn.net/detail/shenfuli/6575533
创建索引方式
1. solr 的客户端调用solrj 建索引+分页查询
/*创建数据库测试表*/
create table DELTA_IMPORT
(
ID NUMBER(15) not null,
WARECODE VARCHAR2(500),
WARENAME VARCHAR2(500),
WARE_STATUS VARCHAR2(500),
LAST_MODIFIED DATE
)
新增测试数据
2. solr从数据库建立索引
Index a DB table directly into Solr
Step 1 : Edit your solrconfig.xml to add the request handle
<!-- DataImportHandler -->
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">D:/Dev/appservers/solr_server/webapps/solr/db/db-config.xml</str>
</lst>
</requestHandler>
Step 2 : Create a data-config.xml file as follows and save it to the conf dir
<dataConfig>
<dataSource type="JdbcDataSource"
driver="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@192.168.204.135:1521:mydb"
user="ngves3"
password="asiainfo"/>
<document name="full_import" pk="ID">
<entity name="fullImport"
transformer="ClobTransformer"
query="select * from delta_import" >
<field column="ID" name="id" />
<field column="wareCode" name="wareCode"/>
<field column="wareName" name="wareName" />
<field column="wareStatus" name="wareStatus" />
</entity>
</document>
</dataConfig>
Step 3 : Ensure that your solr schema (schema.xml) has the fields 'id', 'TITLE', 'CONTENT','SENDTIME'. Change the appropriate details in the data-config.xml
Step 4: Drop your JDBC driver jar file into the <solr-home>/lib directory
Step 5 : Run the command
http://solr-host:port/solr/dataimportcommand=full-import
Keep in mind that every time a full-import is executed the index is cleaned up. If you do not wish that to happen add clean=false. For example:
http://solr-host:port/solr/dataimportcommand=full-import&clean=false
Index data from multiple tables into Solr
Step: 1 Change the data-config as follows :
Step 2: The schema.xml should have the solr_details field
Step 3: Run the full-import command
访问地址: http://192.168.204.135:9081/solr/admin/dataimport.jsp
第一种情况:
full-import : "完全导入"这个操作可以通过访问URL http://192.168.0.248:9080/solr/dataimportcommand=full-import 完成。
这个操作,将会新起一个线程。response中的attribute属性将会显示busy。
这个操作执行的时间取决于数据集的大小。
当这个操作运行完了以后,它将在conf/dataimport.properties这个文件中记录下这个操作的开始时间
当“增量导入”被执行时,stored timestamp这个时间戳将会被用到
solr的查询在“完全导入”时,不是阻塞的
它还有下面一些参数:
clean : (default 'true'). 决定在建立索引之前,删除以前的索引。
commit : (default 'true'). 决定这个操作之后是否要commit
optimize : (default 'true'). 决定这个操作之后是否要优化。
debug : (default false). 工作在debug模式下。详情请看 the interactive development mode (see here )
编写J***A程序模拟 http://192.168.204.135:9081/solr/dataimport?clean=true&commit=true&command=full-import
1. 配置文件:
<dataConfig>
<dataSource type="JdbcDataSource"
driver="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@192.168.204.135:1521:mydb"
user="ngves3"
password="asiainfo"/>
<document name="full_import" pk="ID">
<entity name="fullImport"
transformer="ClobTransformer"
query="select * from delta_import" >
<field column="ID" name="id" />
<field column="wareCode" name="wareCode"/>
<field column="wareName" name="wareName" />
<field column="wareStatus" name="wareStatus" />
</entity>
</document>
</dataConfig>
2. 测试代码
public void testFullImportByHttpClient() throws Exception{
logger.info("start create index from db!");
String result = null;
String urlAddr = null;
Map<String, String> param = null;
try {
urlAddr = "http://192.168.204.135:9081/solr/dataimport";
param = new HashMap<String, String>();
param.put("clean", "true");//对于索引创建完成不需要删除的内容可以设置为false,例如: 积分商城搜索设置为false
param.put("commit","true");//commit设置true后,才会真正更新索引索引库
param.put("command","full-import");
result = HttpHelper.doPost(urlAddr, param);
if(logger.isInfoEnabled()){
logger.info("result = " + result);
}
logger.info("success create index!");
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
第二种情况:
delta-import : 当遇到一些增量的输入,或者发生一些变化时使用http://192.168.0.248:9080/solr/dataimport?command=delta-import它同样支持 clean, commit, optimize and debug 这几个参数
1. 配置文件
<dataConfig>
<dataSource type="JdbcDataSource"
driver="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@192.168.204.135:1521:mydb"
user="ngves3"
password="asiainfo"/>
<document name="delta_import" >
<entity name="deltaImport" pk="ID"
transformer="ClobTransformer"
query="select * from delta_import"
deltaQuery="select id from delta_import where
to_char(last_modified,'YYYY-MM-DD HH24:MI:SS') > '${dataimporter.last_index_time}'">
<field column="ID" name="id" />
<field column="wareCode" name="wareCode"/>
<field column="wareName" name="wareName" />
<field column="wareStatus" name="wareStatus" />
</entity>
</document>
</dataConfig>
2. 测试代码
public void testDeltaImportByHttpClient() throws Exception{
logger.info("start create index from db!");
String result = null;
String urlAddr = null;
Map<String, String> param = null;
try {
urlAddr = "http://192.168.204.135:9081/solr/dataimport";
param = new HashMap<String, String>();
param.put("clean", "false");//对于索引创建完成不需要删除的内容可以设置为false,例如: 积分商城搜索设置为false
param.put("commit","true");//commit设置true后,才会真正更新索引索引库
param.put("command", "delta-import");//增量创建索引
result = HttpHelper.doPost(urlAddr, param);
if(logger.isInfoEnabled()){
logger.info("result = " + result);
}
logger.info("success create index!");
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
第三种情况:
status : 想要知道命令执行的状态 , 访问 URL http://192.168.0.248:9080/solr/dataimport .它给出了关于文档创建、删除,查询、结果获取等等的详细状况
第四种情况:
reload-config : 如果data-config.xml已经改变,你不希望重启solr,而要重新加载配置时,运行一下的命令http://192.168.0.248:9080/solr/dataimport?command=reload-config
第五种情况:
abort : 你可以通过访问 http://192.168.0.248:9080/solr/dataimport?command=abort 来终止一个在运行的操作
文本来自: http://www.cnblogs.com/atyou/archive/2013/04/19/3031323.html
两种方式:1) 全量更新索引 2) 增量更新索引
其中: 关于全量和增量测试报告详见以下URL:
http://download.csdn.net/detail/shenfuli/6575533
创建索引方式
1. solr 的客户端调用solrj 建索引+分页查询
/*创建数据库测试表*/
create table DELTA_IMPORT
(
ID NUMBER(15) not null,
WARECODE VARCHAR2(500),
WARENAME VARCHAR2(500),
WARE_STATUS VARCHAR2(500),
LAST_MODIFIED DATE
)
新增测试数据
2. solr从数据库建立索引
Index a DB table directly into Solr
Step 1 : Edit your solrconfig.xml to add the request handle
<!-- DataImportHandler -->
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">D:/Dev/appservers/solr_server/webapps/solr/db/db-config.xml</str>
</lst>
</requestHandler>
Step 2 : Create a data-config.xml file as follows and save it to the conf dir
<dataConfig>
<dataSource type="JdbcDataSource"
driver="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@192.168.204.135:1521:mydb"
user="ngves3"
password="asiainfo"/>
<document name="full_import" pk="ID">
<entity name="fullImport"
transformer="ClobTransformer"
query="select * from delta_import" >
<field column="ID" name="id" />
<field column="wareCode" name="wareCode"/>
<field column="wareName" name="wareName" />
<field column="wareStatus" name="wareStatus" />
</entity>
</document>
</dataConfig>
Step 3 : Ensure that your solr schema (schema.xml) has the fields 'id', 'TITLE', 'CONTENT','SENDTIME'. Change the appropriate details in the data-config.xml
Step 4: Drop your JDBC driver jar file into the <solr-home>/lib directory
Step 5 : Run the command
http://solr-host:port/solr/dataimportcommand=full-import
Keep in mind that every time a full-import is executed the index is cleaned up. If you do not wish that to happen add clean=false. For example:
http://solr-host:port/solr/dataimportcommand=full-import&clean=false
Index data from multiple tables into Solr
Step: 1 Change the data-config as follows :
Step 2: The schema.xml should have the solr_details field
Step 3: Run the full-import command
访问地址: http://192.168.204.135:9081/solr/admin/dataimport.jsp
第一种情况:
full-import : "完全导入"这个操作可以通过访问URL http://192.168.0.248:9080/solr/dataimportcommand=full-import 完成。
这个操作,将会新起一个线程。response中的attribute属性将会显示busy。
这个操作执行的时间取决于数据集的大小。
当这个操作运行完了以后,它将在conf/dataimport.properties这个文件中记录下这个操作的开始时间
当“增量导入”被执行时,stored timestamp这个时间戳将会被用到
solr的查询在“完全导入”时,不是阻塞的
它还有下面一些参数:
clean : (default 'true'). 决定在建立索引之前,删除以前的索引。
commit : (default 'true'). 决定这个操作之后是否要commit
optimize : (default 'true'). 决定这个操作之后是否要优化。
debug : (default false). 工作在debug模式下。详情请看 the interactive development mode (see here )
编写J***A程序模拟 http://192.168.204.135:9081/solr/dataimport?clean=true&commit=true&command=full-import
1. 配置文件:
<dataConfig>
<dataSource type="JdbcDataSource"
driver="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@192.168.204.135:1521:mydb"
user="ngves3"
password="asiainfo"/>
<document name="full_import" pk="ID">
<entity name="fullImport"
transformer="ClobTransformer"
query="select * from delta_import" >
<field column="ID" name="id" />
<field column="wareCode" name="wareCode"/>
<field column="wareName" name="wareName" />
<field column="wareStatus" name="wareStatus" />
</entity>
</document>
</dataConfig>
2. 测试代码
public void testFullImportByHttpClient() throws Exception{
logger.info("start create index from db!");
String result = null;
String urlAddr = null;
Map<String, String> param = null;
try {
urlAddr = "http://192.168.204.135:9081/solr/dataimport";
param = new HashMap<String, String>();
param.put("clean", "true");//对于索引创建完成不需要删除的内容可以设置为false,例如: 积分商城搜索设置为false
param.put("commit","true");//commit设置true后,才会真正更新索引索引库
param.put("command","full-import");
result = HttpHelper.doPost(urlAddr, param);
if(logger.isInfoEnabled()){
logger.info("result = " + result);
}
logger.info("success create index!");
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
第二种情况:
delta-import : 当遇到一些增量的输入,或者发生一些变化时使用http://192.168.0.248:9080/solr/dataimport?command=delta-import它同样支持 clean, commit, optimize and debug 这几个参数
1. 配置文件
<dataConfig>
<dataSource type="JdbcDataSource"
driver="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@192.168.204.135:1521:mydb"
user="ngves3"
password="asiainfo"/>
<document name="delta_import" >
<entity name="deltaImport" pk="ID"
transformer="ClobTransformer"
query="select * from delta_import"
deltaQuery="select id from delta_import where
to_char(last_modified,'YYYY-MM-DD HH24:MI:SS') > '${dataimporter.last_index_time}'">
<field column="ID" name="id" />
<field column="wareCode" name="wareCode"/>
<field column="wareName" name="wareName" />
<field column="wareStatus" name="wareStatus" />
</entity>
</document>
</dataConfig>
2. 测试代码
public void testDeltaImportByHttpClient() throws Exception{
logger.info("start create index from db!");
String result = null;
String urlAddr = null;
Map<String, String> param = null;
try {
urlAddr = "http://192.168.204.135:9081/solr/dataimport";
param = new HashMap<String, String>();
param.put("clean", "false");//对于索引创建完成不需要删除的内容可以设置为false,例如: 积分商城搜索设置为false
param.put("commit","true");//commit设置true后,才会真正更新索引索引库
param.put("command", "delta-import");//增量创建索引
result = HttpHelper.doPost(urlAddr, param);
if(logger.isInfoEnabled()){
logger.info("result = " + result);
}
logger.info("success create index!");
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
第三种情况:
status : 想要知道命令执行的状态 , 访问 URL http://192.168.0.248:9080/solr/dataimport .它给出了关于文档创建、删除,查询、结果获取等等的详细状况
第四种情况:
reload-config : 如果data-config.xml已经改变,你不希望重启solr,而要重新加载配置时,运行一下的命令http://192.168.0.248:9080/solr/dataimport?command=reload-config
第五种情况:
abort : 你可以通过访问 http://192.168.0.248:9080/solr/dataimport?command=abort 来终止一个在运行的操作
文本来自: http://www.cnblogs.com/atyou/archive/2013/04/19/3031323.html
相关文章推荐
- solr学习之(五)_solr4.2.0中从数据库中导入数据到索引
- Solr学习笔记之3、Solr dataimport - 从SQLServer导入数据建立索引
- solr 从数据库导入数据,全量索引和增量索引(实例&配置&原理)
- 转:solr 从数据库导入数据,全量索引和增量索引(实例&配置&原理)
- Solr1.4.0源码分析(一) 解决DataImportHandler从数据库导入大量数据而内存溢出的问题
- 企业级搜索引擎Solr 第三章 索引数据(Indexing Data)[1]
- solr 学习之路 如何将数据库中大量的数据导入solr <三>
- Solr-----7、Solr使用DataImportHandler导入数据库数据
- 企业级搜索引擎Solr 第三章 索引数据(Indexing Data)
- Solr6.2.1 学习笔记(二)从数据库导入数据
- Solr 7.2 使用DataImportHandler导入数据库数据
- 企业级搜索引擎Solr 第三章 索引数据(Indexing Data)[2]
- 企业级搜索引擎Solr 第三章 索引数据(Indexing Data)
- solr学习第三课----solr索引维护-基于solr搜索引擎
- solr 从数据库导入数据,全量索引和增量索引
- 将数据库的数据导入solr索引库中
- Solr学习(四)DIH全量导入并索引数据
- solr 从数据库导入数据,全量索引和增量索引
- solr4.0.0学习(二) 数据库导入clob与blob为索引
- solr 数据导入(DataImportHandler)