solr索引数据库
1.创建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', 'summer', '30', 'shanghai'); INSERT INTO `user` VALUES ('2', 'test1', '22', 'suzhou'); INSERT INTO `user` VALUES ('3', 'test1', '29', 'some place'); INSERT INTO `user` VALUES ('4', 'lu', '28', 'some place'); INSERT INTO `user` VALUES ('5', 'xiaoxun', '27', 'nanjing');
2. 配置D:\Solr\solr-4.10.3\example\solr\collection1\conf\solrconfig.xml
在<requestHandler name="/select" class="solr.SearchHandler">前面加上dataimport的处理的Handler
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">data-config.xml</str> </lst> </requestHandler>
3.在同目录下添加data-config.xml<?xml version="1.0" encoding="UTF-8"?><dataConfig>
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/mybatis" user="root" password="luxx" 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是数据库里的column名,后面的name属性对应着Solr的Filed的名字。
4.修改同目录下的schema.xml,这是Solr对数据库里的数据进行索引的模式
(1)保留_version_ 这个field
(2)添加索引字段:这里每个field的name要和data-config.xml里的entity的field的name一样,一一对应。
<field name="id" type="int" indexed="true" stored="true" required="true" multiValued="false" /> <!--<field name="id" type="int" indexed="true" stored="true" required="true" multiValued="false"/> --> <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" />
(3)设置唯一主键:<uniqueKey>id</uniqueKey>,注意:Solr中索引的主键默认是只支持type="string"字符串类型的,而我的数据库中id是int型的,会有问题,解决方法:修改同目录下的elevate.xml,注释掉下面2行,这貌似是Solr的Bug,原因不明
<doc id="MA147LL/A" />
<doc id="IW-02" exclude="true" />
(4)拷贝mysql-connector-java-5.1.22-bin.jar和solr-dataimporthandler-4.10.3.jar到
D:\Solr\solr-4.10.3\example\solr-webapp\webapp\WEB-INF\lib。一个是mysql的java驱动,另一个在D:\Solr\solr-4.10.3\dist目录里,是org.apache.solr.handler.dataimport.DataImportHandler所在的jar。
5.创建实体类
package com.sishuok; import org.apache.solr.client.solrj.beans.Field; public class User { @Field private int id; @Field private String username; @Field private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "User [id=" + id + ", username=" + username + ", password=" + password + "]"; } }
6.添加
/** * 添加索引 * * @throws IOException * @throws SolrServerException */ @Test public void test4() throws Exception { User user=new User(); user.setId(1); user.setPassword("1234"); user.setUsername("tom4"); server.addBean(user); server.commit(); }
7.查询
/** * 查询索引 * * @throws IOException * @throws SolrServerException */ @Test public void test5() throws Exception { SolrQuery query = new SolrQuery(); query.setQuery("*:*"); query.setStart(0); query.setRows(10); QueryResponse response = server.query(query); SolrDocumentList solrDocumentList = response.getResults(); System.out.println("查询的条数为: " + solrDocumentList.getNumFound()); for (SolrDocument solrDocument : solrDocumentList) { System.out.println("id: " + solrDocument.get("id")); System.out.println("username: " + solrDocument.get("username")); System.out.println("password: " + solrDocument.get("password")); } }
参考连接:http://www.cnblogs.com/luxiaoxun/p/4442770.html
浙公网安备 33010602011771号