全文索引----配置solr数据源
2016-04-30 21:10
681 查看
上篇文章我们介绍了solrJ工具,本篇文章我们介绍solr的数据源。我们使用solr作为全文索引的服务器,那么必须要为solr提供数据源,小编solr服务器总结了三种数据来源,分别是:使用命令提供数据源、solrJ提供数据源和配置文件配置数据源,下边分别介绍着三种方式。
一 使用命令配置数据源
1 环境
本文以linux环境作为示例介绍此功能,操作环境centOS。
2 数据源
以现有的,Apache官方demo提供的XML文件作为示例数据源。
3 实现
java -jar post.jar solr.xml monitor.xml
monitor数据
4 测试
说明:我们使用name=3007WFP条件查询数据,得到结果如上图所示。
二 使用solrJ配置数据源
1 环境
使用HttpSolrServer对象,需要引入solr-solrj-4.0.0.jar文件。
2 数据源
我们直接构造SolrInputDocument对象作为solr引擎的数据源。
3 实现
4 测试
说明:
可以看到,我们使用name=doc1的查询条件将第一条记录查询出来了。
三 使用配置文件配置数据源
1 环境
操作系统:centOS
数据库:MySQL
2 数据源
使用数据库的一张表作为solr服务器的数据源。
3 实现
1> 创建MySQL数据库
DataBase:jfinal_demo
Table Name:user
SQL脚本如下:
数据库截图:
2> 配置数据来源
根据/usr/local/solr-4.7.2/example/solr/collection1/conf/目录,找到solr-config.xml配置文件,在 <requestHandler
name="/select" class="solr.SearchHandler">的前面,添加dataimport的处理handler。
如下图所示:
说明:
此配置文件用于配置solr服务器的数据来源,即可以通过数据库获取数据源。
3> 配置数据源
在同目录下找到data-config.xml,如果没有则添加一个,配置如下:
如下图所示:
说明:
此配置用于配置数据库数据源,类似持久层配置文件。
dataSource用于配置服务器、数据库驱动、用户、密码等;
entity:用于配置一张表,对应一个实体,pk为主键,query为查询语句。
field:对应实体的字段,column对应数据库中的字段名称,name对应solr服务的索引名称。
4> 配置索引
找到同目录下的schema.xml,配置如下:
(1) 保留_version_这个field;
(2) 添加索引字段:这里每个field的name都要和data-config.xml中entity的field的name一致。
如下图所示:
说明:
因为id属性已经被配置过,所以这里不需要再次配置,否则重启solr服务时会报错。
(3) 删除多余的field,删除copyField中的设置,这些用不上。注意:text这个field不能删除,否则solr服务重启失败。
(4) 设置唯一主键: <uniqueKey>id</uniqueKey>
注意:solr服务中的索引的主键默认只支持type="String",解决办法:修改同目录下的elevate.xml,注释掉下面2行。
如图所示:
5> 配置jar包
拷贝mysql-connector-java-5.1.22-bin.jar和solr-dataimporthandler-4.10.3.jar到/usr/local/solr-4.7.2\example\solr-webapp\webapp\WEB-INF\lib。一个是mysql的java驱动,另一个在/usr/local/solr-4.7.2\dist目录里,是org.apache.solr.handler.dataimport.DataImportHandler所在的jar。
6> 重启solr服务
4 测试
四 总结
第一种方式简单,并且数据通常不会变化,适合初学者测试服务器使用;第二种方式数据不确定,但是变化范围小,通常用于模拟某种情形,适用于调试程序;第三种方式数据不确定,索引维护复杂,但是功能强大,适用于一般全文索引程序使用。
声明:如无特殊声明,本系列博客以solr-4.7.2版本为例,如有错误,敬请斧正。
一 使用命令配置数据源
1 环境
本文以linux环境作为示例介绍此功能,操作环境centOS。
2 数据源
以现有的,Apache官方demo提供的XML文件作为示例数据源。
3 实现
java -jar post.jar solr.xml monitor.xml
monitor数据
4 测试
说明:我们使用name=3007WFP条件查询数据,得到结果如上图所示。
二 使用solrJ配置数据源
1 环境
使用HttpSolrServer对象,需要引入solr-solrj-4.0.0.jar文件。
2 数据源
我们直接构造SolrInputDocument对象作为solr引擎的数据源。
3 实现
String url = "http://192.168.22.216:8983/solr"; HttpSolrServer server = new HttpSolrServer(url); server.setSoTimeout(3000); // socket read timeout server.setConnectionTimeout(1000); server.setDefaultMaxConnectionsPerHost(1000); server.setMaxTotalConnections(10); server.setFollowRedirects(false); // defaults to false server.setAllowCompression(true); server.setMaxRetries(1); //构造document1 SolrInputDocument doc1 = new SolrInputDocument(); doc1.addField( "id", "id1", 1.0f ); doc1.addField( "name", "doc1", 1.0f ); doc1.addField( "price", 10 ); //构造document2 SolrInputDocument doc2 = new SolrInputDocument(); doc2.addField( "id", "id2", 1.0f ); doc2.addField( "name", "doc2", 1.0f ); doc2.addField( "price", 20 ); //构造document集合 Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>(); docs.add(doc1); docs.add(doc2); //将documents提交给solr try { server.add(docs); } catch (SolrServerException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } //提交一个commit(方法一) try { server.commit(); } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
4 测试
说明:
可以看到,我们使用name=doc1的查询条件将第一条记录查询出来了。
三 使用配置文件配置数据源
1 环境
操作系统:centOS
数据库:MySQL
2 数据源
使用数据库的一张表作为solr服务器的数据源。
3 实现
1> 创建MySQL数据库
DataBase:jfinal_demo
Table Name:user
SQL脚本如下:
SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for `user` -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `userName` varchar(50) DEFAULT NULL, `userAge` int(11) DEFAULT NULL, `userAddress` varchar(200) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES ('1', 'test1', '11', 'suzhou');
INSERT INTO `user` VALUES ('2', 'test2', '22', 'shanghai'); INSERT INTO `user` VALUES ('3', 'test3', '33', 'guangzhou');
INSERT INTO `user` VALUES ('4', 'test4', '44', 'shenzhen'); INSERT INTO `user` VALUES ('5', 'test5', '55', 'beijing');
数据库截图:
2> 配置数据来源
根据/usr/local/solr-4.7.2/example/solr/collection1/conf/目录,找到solr-config.xml配置文件,在 <requestHandler
name="/select" class="solr.SearchHandler">的前面,添加dataimport的处理handler。
<span style="white-space:pre"> </span><requestHandler name="/dataimport"class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">data-config.xml</str> </lst> </requestHandler>
如下图所示:
说明:
此配置文件用于配置solr服务器的数据来源,即可以通过数据库获取数据源。
3> 配置数据源
在同目录下找到data-config.xml,如果没有则添加一个,配置如下:
<?xml version="1.0" encoding="UTF-8"?> <dataConfig> <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.21.20:3306/jfinal_demo" user="root" password="123456" batchSize="-1" /> <document name="testDoc"> <entity name="user" pk="id" query="select * from user"> <field column="id" name="id"/> <field column="userName" name="userName"/> <field column="userAge" name="userAge"/> <field column="userAddress" name="userAddress"/> </entity> </document> </dataConfig>
如下图所示:
说明:
此配置用于配置数据库数据源,类似持久层配置文件。
dataSource用于配置服务器、数据库驱动、用户、密码等;
entity:用于配置一张表,对应一个实体,pk为主键,query为查询语句。
field:对应实体的字段,column对应数据库中的字段名称,name对应solr服务的索引名称。
4> 配置索引
找到同目录下的schema.xml,配置如下:
(1) 保留_version_这个field;
(2) 添加索引字段:这里每个field的name都要和data-config.xml中entity的field的name一致。
<span style="white-space:pre"> </span><field name="userName" type="text_general" indexed="true" stored="true" /> <field name="userAge" type="int" indexed="true" stored="true" /> <field name="userAddress" type="text_general" indexed="true" stored="true" />
如下图所示:
说明:
因为id属性已经被配置过,所以这里不需要再次配置,否则重启solr服务时会报错。
(3) 删除多余的field,删除copyField中的设置,这些用不上。注意:text这个field不能删除,否则solr服务重启失败。
(4) 设置唯一主键: <uniqueKey>id</uniqueKey>
注意:solr服务中的索引的主键默认只支持type="String",解决办法:修改同目录下的elevate.xml,注释掉下面2行。
如图所示:
5> 配置jar包
拷贝mysql-connector-java-5.1.22-bin.jar和solr-dataimporthandler-4.10.3.jar到/usr/local/solr-4.7.2\example\solr-webapp\webapp\WEB-INF\lib。一个是mysql的java驱动,另一个在/usr/local/solr-4.7.2\dist目录里,是org.apache.solr.handler.dataimport.DataImportHandler所在的jar。
6> 重启solr服务
4 测试
四 总结
第一种方式简单,并且数据通常不会变化,适合初学者测试服务器使用;第二种方式数据不确定,但是变化范围小,通常用于模拟某种情形,适用于调试程序;第三种方式数据不确定,索引维护复杂,但是功能强大,适用于一般全文索引程序使用。
声明:如无特殊声明,本系列博客以solr-4.7.2版本为例,如有错误,敬请斧正。
相关文章推荐
- 在Eclipse中运行Solr 基础知识
- Solr 5.3.0集成mmseg4j、tomcat部署、Solrj 5.3.0使用
- Solr基础--设置solr/home的三种方式
- windows下安装solr5.5.0
- Docker使用supervisor构建solr
- solr4.0安装和简单导入mysql数据
- Solr 4.0 基础教程
- 自译Solr in action中文版
- Solr In Action 中文版 第一章(一)
- Solr In Action 中文版 第一章 (二)
- Solr In Action 中文版 第一章(三)
- 基于solr实现hbase的二级索引
- 基于Nutch&Solr定向采集解析和索引搜索的整合技术指南文档
- 基于Nutch&Solr定向采集解析和索引搜索的整合技术指南文档
- Tomcat/Solr4.3.1 配置过程
- Solr Facet技术的应用与研究
- Apache Solr查询语法
- Solr客户端删除数据的方式
- Solr5.4 在 Tomcat 部署
- Centos 安装 Solr