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

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 + "]";
    }

}
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














posted on 2017-05-25 17:16  老邱2  阅读(135)  评论(0)    收藏  举报

导航