全文索引----配置solr数据源

        上篇文章我们介绍了solrJ工具,本篇文章我们介绍solr的数据源。我们使用solr作为全文索引的服务器,那么必须要为solr提供数据源,小编solr服务器总结了三种数据来源,分别是:使用命令提供数据源、solrJ提供数据源和配置文件配置数据源,下边分别介绍着三种方式。
一 使用命令配置数据源
    1 环境
    本文以linux环境作为示例介绍此功能,操作环境centOS。
    2 数据源
    以现有的,Apache官方demo提供的XML文件作为示例数据源。
    3 实现

    java -jar post.jar solr.xml monitor.xml

    monitor数据

全文索引----配置solr数据源_第1张图片

    4 测试
    全文索引----配置solr数据源_第2张图片

      说明:我们使用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 测试

全文索引----配置solr数据源_第3张图片

      说明:

           可以看到,我们使用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');

数据库截图:

全文索引----配置solr数据源_第4张图片

    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数据源_第5张图片


    说明:
    此配置文件用于配置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>

        如下图所示:

全文索引----配置solr数据源_第6张图片

    说明:
    此配置用于配置数据库数据源,类似持久层配置文件。
    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" /> 

如下图所示:

全文索引----配置solr数据源_第7张图片


    说明:
    因为id属性已经被配置过,所以这里不需要再次配置,否则重启solr服务时会报错。
    (3) 删除多余的field,删除copyField中的设置,这些用不上。注意:text这个field不能删除,否则solr服务重启失败。

    (4) 设置唯一主键:  <uniqueKey>id</uniqueKey>

        注意:solr服务中的索引的主键默认只支持type="String",解决办法:修改同目录下的elevate.xml,注释掉下面2行。

     如图所示:

全文索引----配置solr数据源_第8张图片

    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数据源_第9张图片
四 总结


        第一种方式简单,并且数据通常不会变化,适合初学者测试服务器使用;第二种方式数据不确定,但是变化范围小,通常用于模拟某种情形,适用于调试程序;第三种方式数据不确定,索引维护复杂,但是功能强大,适用于一般全文索引程序使用。

你可能感兴趣的:(Solr,全文索引数据源)