您的位置:首页 > 其它

全文索引----配置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 实现
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版本为例,如有错误,敬请斧正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息