ahxcjxzxh 发表于 2017-12-18 19:10:15

solr索引数据库

  1.创建sql

  

SET FOREIGN_KEY_CHECKS=0;  

  
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;
  

  

  
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');
  


View Code  2. 配置D:\Solr\solr-4.10.3\example\solr\collection1\conf\solrconfig.xml
  在<requestHandler name="/select">前面加上dataimport的处理的Handler
  

<requestHandler name="/dataimport">  
     <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 />
  

<doc 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>
  @Field
private int>@Fieldprivate String username;  @Field
private String password;  

public int getId() {return>}  

public void setId(int>this.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=" +>}  

  
}
  


View Code  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();
  }
  


View Code  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"));  }
  }
  


View Code  参考连接:http://www.cnblogs.com/luxiaoxun/p/4442770.html
  
页: [1]
查看完整版本: solr索引数据库