欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用solr从MySQL数据库导入数据并索引

程序员文章站 2022-05-07 20:56:20
...

 

参考:

 

wiki: http://wiki.apache.org/solr/

 

跟益达学solr  

跟益达学Solr5之从MySQL数据库导入数据并索引

 

步骤:

 

 

1.

    下载并解压solr,jetty,我用的版本是solr-5.3.1,jetty-9.3.6

2.

    将solr的server/solr-webapp/webapp文件夹复制到jetty的webapps目录下,并将文件夹名字webapp改名为solr, 同时将server\lib\ext目录下的所有jar包复制到jetty的lib\ext目录下

3.

    jetty根目录下新建一个文件夹solr

4.

    复制solr的server\solr目录下的solr.xml文件至jetty的solr目录下

5.

    在jetty的solr目录下创建core1文件夹

6.

    复制solr的example\example-DIH\solr\solr目录下的全部文件(core.properties文件和conf文件夹)到jetty的solr/core1目录下

7.

    复制solr的dist目录下的solr-dataimporthandler-5.3.1.jar复制到jetty的webapps\solr\WEB-INF\lib目录下

8.

    复制数据库jdbc驱动jar(例如mysql的mysql-connector-java-5.1.6.jar)到jetty的webapps\solr\WEB-INF\lib目录下

9.

    在solr的core1/conf目录下的solrconfig.xml文件中添加内容(在config标签内添加):

<requestHandler name="/dataimport" class="solr.DataImportHandler">  

      <lst name="defaults">  

            <str name="config">solr-data-config.xml</str>  

      </lst>  

</requestHandler> 

10.

    修改core1/conf目录下solr-data-config.xml的内容为(根据本地数据库具体情况配置):

<dataConfig>

    <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test" user="root" password="root"/>

    <document>

        <entity name="_user" query="select * from _user">

            <field column="id" name="id" />

            <field column="age" name="age" />

            <field column="username" name="username"/>

            <field column="password" name="password"/>

        </entity>

    </document>

</dataConfig>

11.

    修改core1/conf目录下schema.xml,添加表中的字段定义(如果主键为id,就不需要添加id的field了):

   <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /> 

   

   <field name="age" type="int" indexed="true" stored="true" required="false" multiValued="false" /> 

   <field name="username" type="string" indexed="true" stored="true" required="false" multiValued="false" /> 

   <field name="password" type="string" indexed="true" stored="true" required="false" multiValued="false" /> 

   

   

   

12.

    启动jetty:在jetty目录下,执行命令:java -jar start.jar即可

13.

    打开http://localhost:8080/solr/

在左侧,core selector下拉框中选中core1,点击Dataimport,可以看到Command有full-import和delta-import两种(具体区别可自行搜索),第一次可以选full-import,Entity下拉框面选_user,选中“Auto-Refresh Status”,点击Execute,

可以看到右边状态:Indexing,最后变为Indexing completed表示索引已经建好了。

然后点击左侧的Query,在q下面的输入框中输入:password:aaa,点击Execute Query来从索引中查询password为aaa的结果。

 

    结束。。。

 

 

java客户端操作solr:参考:http://wiki.apache.org/solr/Solrj

以及:

SolrJ增删查

 

package com.tch.test.solr.test;

import java.io.IOException;
import java.util.List;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.impl.XMLResponseParser;
import org.apache.solr.client.solrj.response.QueryResponse;

import com.tch.test.solr.entity.User;

public class TestSolr {

    public static void main(String[] args) throws IOException, SolrServerException {
        String url = "http://localhost:8080/solr/core1";
        HttpSolrClient client = new HttpSolrClient(url);
        client.setConnectionTimeout(5000);
        client.setParser(new XMLResponseParser()); // binary parser is used by default
        client.setSoTimeout(1000); // socket read timeout
        client.setDefaultMaxConnectionsPerHost(100);
        client.setMaxTotalConnections(100);
        client.setFollowRedirects(false); // defaults to false
        client.setAllowCompression(true);

        //删除操作
        //client.deleteByQuery("*:*");

        //插入
        User item = new User();
        item.setId("111");
        item.setAge(25);
        item.setIsCoverImage(1);
        item.setUsername("username-1");
        item.setPassword("password-1");
        client.addBean(item);

        User item_cn = new User();
        item_cn.setId("222");
        item_cn.setAge(26);
        item_cn.setIsCoverImage(0);
        item_cn.setUsername("中文");
        item_cn.setPassword("password-2");
        client.addBean(item_cn);

        // commit
        client.commit();

        //查询
        SolrQuery query = new SolrQuery();
        query.setQuery("*:*");
        //分页
        query.setStart(10);
        query.setRows(20);
        //query.addSort(new SortClause("id", ORDER.desc));//结果排序
        QueryResponse response = client.query(query);
        List<User> items = response.getBeans(User.class);
        for (User i : items) {
            System.out.println(i);
        }
        System.out.println(response.getResults());
        client.close();
    }
}