solr导入数据库并索引数据

下载solr并创建一个new core:Articles

使用DataImportHandler导入数据并添加索引
1.配置D:\solr-6.6.0\server\solr\articles\conf\solrconfig.xml
在文件最后添加

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

       <lst name="defaults">

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

       </lst>

  </requestHandler>

2.在同目录下创建文件data-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
  <dataSource driver="com.mysql.cj.jdbc.Driver" url="jdbc:mysql://XXXX:3306/XXXX?useUnicode=true&amp;serverTimezone=UTC&amp;useSSL=true&amp;characterEncoding=UTF-8" user="root" password="XXXXX"/>
  <document name="sys_user">
    <entity name="sys_user" pk="id" query="SELECT id,organization_id, username, password,salt,role_ids from sys_user"> 
            <field column="id" name="id"/>
            <field column="organization_id" name="organization_id"/> 
            <field column="username" name="username"/> 
            <field column="password" name="password"/>
			<field column="salt" name="salt"/>
			<field column="role_ids" name="role_ids"/>
    </entity>
  </document>
</dataConfig>

其中dataSource是数据库数据源,entity是一张表对应的实体,pk是主键,query是查询语句
Field对应一个字段,column是数据库里的字段名,后面的name对应值solr的field的名字。

3.修改同目录下的managed-schema文件,这里是solr对胡句酷里的数据进行索引的模式
添加索引字段—每个field的name要和data-config.xml中entity的field的name一致,一一对应

<field name="id" type="long" indexed="true" required="true" multiValued="false"/>
		<field name="organization_id" type="long" indexed="true" stored="true"/>
		<field name="username" type="string" indexed="true" stored="false" />
		<field name="password" type="string" indexed="true" stored="false" />
		<field name="salt" type="string" indexed="true" stored="false"/>
		<field name="role_ids" type="string" indexed="true" stored="false" />

注释掉原本文件里自带的重复field,否则会报错,例如:

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

4.将mysql-connector-java-xxx-bin.jar和solr-dataimporthandler-xxx.jar(xxx版本号)复制到D:\solr-6.6.0\server\solr-webapp\webapp\WEB-INF\lib,其中solr-dataimporthandler-xxx.jar在D:\solr-6.6.0\dist目录下。

5.cmd下进入solr安装目录的bin目录下。solr restart -p8983重启solr服务,如果配置成功可以进入Articles中,点击Dataimport,选择full-import(全量导入),点击execute即可。
Query测试:在q中输入userName:test1进行检索就可以看到结果。

同时,我们可以通过代码的形式来实现

保存或更新solr的数据:

/**
     * @Autuor:xy.Gao
     * @Description:保存或者更新solr数据
     * @Date: 2018/7/3 15:01
     */
    public static <T> boolean saveSolrResource(T solrEntity) {
        DocumentObjectBinder binder = new DocumentObjectBinder();
        SolrInputDocument doc = binder.toSolrInputDocument(solrEntity);
        try {
            client.add(doc);
            client.commit();
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

删除solr的数据

    /**
     * @Autuor:xy.Gao
     * @Description:删除solr数据
     * @Date: 2018/7/3 15:04
     */
    public static boolean removeSolrData(String id) {
        try {
            client.deleteById(id);
            client.commit();
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

查询solr数据:

    /**
     * @Autuor:xy.Gao
     * @Description:查询数据
     * @Date: 2018/7/3 15:07
     */

    public static QueryResponse query(String keyWords) throws IOException, SolrServerException {
        SolrQuery query = new SolrQuery();
        query.setQuery(keyWords);
        QueryResponse rsp = client.query(query);
        return rsp;
    }

查询数据主函数

   public static void main(String[] args) {
            try {
                QueryResponse response = SolrUtil.query("admin");
                SolrDocumentList beans = response.getResults();
                SolrDocument sysUser=beans.get(0);
                System.out.println(sysUser.getFirstValue("username"));
            } catch (IOException e) {
                e.printStackTrace();
            } catch (SolrServerException e) {
                e.printStackTrace();
            }
    }

参考文档:

https://www.cnblogs.com/luxiaoxun/p/4442770.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值