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

solr7.4.0+mysql+solrj(简而优美)

程序员文章站 2024-01-16 12:32:46
目录: 1 solr7部署+创建核心2 solr mysql 连接 2.1 导入相关 jar包 2.2 配置连接信息 2.3 配置中文分析器3 solrj JAVA客户端应用 3.1 solrj 构建和运行 3.2 solrj 应用(数据的 增、删、改、查) 3.3 solrj JavaBean 整 ......

目录:

1 solr7部署+创建核心
2 solr mysql 连接
 2.1 导入相关 jar包
 2.2 配置连接信息
 2.3 配置中文分析器
3 solrj java客户端应用
 3.1 solrj 构建和运行
 3.2 solrj 应用(数据的 增、删、改、查)
 3.3 solrj javabean 整合应用


 

1 solr7部署+创建核心

solr7需要java8环境,且需要在环境变量中添加 java_home变量。

solr有两种启动模式:

独立模式:适用于数据规模不大的场景

云模式:适用于数据规模大,高可靠、高可用、高并发的场景,基于zookeeper中间件

独立模式是以 (core/核心) 来管理,云模式是以(collection/集合)来管理。

本教程使用独立模式,请到apache官网下载压缩包windows版,solr-7.4.0.zip / 压缩到本地

cd solr-7.4.0/bin/  常用命令:

 solr.cmd start    启动 默认端口:8983

 solr.cmd stop -all  停止  

 solr.cmd create -c [options]  创建核心

 solr.cmd status 运行状态

首先启动solr  执行命令 solr.cmd start  并在浏览器下能访问到下图所示则表示访问成功

solr7.4.0+mysql+solrj(简而优美)

 

 然后创建核心 ,这里我的核心名字叫bless   solr.cmd start -c bless 。下图表示创建成功

solr7.4.0+mysql+solrj(简而优美)

 

新创建core\核心的目录位置

solr7.4.0+mysql+solrj(简而优美)

 


 

2 solr mysql 连接 

2.1 导入相关 jar包

2.1.1  下载 mysql 驱动包:mysql-connector-java-x.x.x.jar

2.1.2  将 mysql 驱动包导入 solr :将下载下来的 mysql-connector-java-x.x.x.jar 拷贝到 solr-7.4.0\server\solr-webapp\webapp\web-inf\lib 下;

2.1.3  将solr{home}\dist目录下的:solr-dataimporthandler-7.4.0.jar和solr-dataimporthandler-extras-7.4.0.jar这两个jar包拷贝到 solr-7.4.0\server\solr-webapp\webapp\web-inf\lib下

solr7.4.0+mysql+solrj(简而优美)

 

 

 solr7.4.0+mysql+solrj(简而优美)

 

 

2.2 配置连接信息

把solr-7.4.0\example\example-dih\solr\db下的文件复制到你创建的core里面 --> solr-7.4.0\server\solr\bless

solr7.4.0+mysql+solrj(简而优美)

solr7.4.0+mysql+solrj(简而优美)

 

打开conf目录在db-data-config.xml和managed-schema中进行配置

solr7.4.0+mysql+solrj(简而优美)

 

  我的数据库表信息

solr7.4.0+mysql+solrj(简而优美) 

db-data-config.xml配置数据库连接信息

<dataconfig>
    <datasource driver="com.mysql.jdbc.driver" url="jdbc:mysql://127.0.0.1:3307/leslia" user="root" password="root" />
    <document>
        <entity name="bless" query="select * from bless">
             <field column="bless_id"         name="id" />
             <field column="bless_content"     name="blesscontent" />
             <field column="bless_time"     name="blesstime"/>
         </entity>
    </document>
</dataconfig>

 这个地方要注意一下 ,field主键必须设置为name="id",否则solr找不到主键会出现问题,为什么?看一下managed-schema配置文件中的这个主键配置

solr7.4.0+mysql+solrj(简而优美)

 

 然后去managed-schema里配置对应的field字段,这个也可以在管理端直接添加,也可以手动修改配置文件,name属性要与db-data-config.xml 文件中name属性一致

<field name="blesscontent" type="text_general" indexed="true" stored="true"/>
<field name="blesstime" type="pdate" indexed="true" stored="true"/>

 

好了配置完毕。重启solr,导入数据

solr7.4.0+mysql+solrj(简而优美)

查询数据库记录是否导入

solr7.4.0+mysql+solrj(简而优美)

2.3 配置中文分析器

在solr-7.4.0/contrib/analysis-extras/lucene-libs下找到lucene-analyzers-smartcn-7.4.0.jar  copy 到 solr-7.4.0\server\solr-webapp\webapp\web-inf\lib

solr7.4.0+mysql+solrj(简而优美)

修改conf/managed-schema 添加如下配置信息,并重新启动solr

<!-- chineseanalyzer -->
<fieldtype name="text_ik" class="solr.textfield" positionincrementgap="100">
    <analyzer type="index">
      <tokenizer class="org.apache.lucene.analysis.cn.smart.hmmchinesetokenizerfactory"/>
    </analyzer>
    <analyzer type="query">
      <tokenizer class="org.apache.lucene.analysis.cn.smart.hmmchinesetokenizerfactory"/>
    </analyzer>
</fieldtype>

使用中文分析 

solr7.4.0+mysql+solrj(简而优美)

不使用中文分析

solr7.4.0+mysql+solrj(简而优美)

 

给数据库字段配置中文分析,需要修改managed-schema配置文件 type="text_ik",具体应用本教程不再涉及。

<field name="blesscontent" type="text_ik" indexed="true" stored="true"/>
<field name="blesstime" type="pdate" indexed="true" stored="true"/>

 


 

3  solrj java客户端应用

solrj是访问solr服务的java客户端,提供索引和搜索的请求方法,solrj通常嵌入在业务系统中,通过solrj的api接口操作solr服务。

示例数据还是应用上面mysql数据库导入的

3.1 solrj 构建和运行

添加maven依赖

<dependency>
  <groupid>org.apache.solr</groupid>
  <artifactid>solr-solrj</artifactid>
  <version>7.4.0</version>
</dependency>

3.2 solrj 应用(数据的 增、删、改、查)

获取 httpsolrclient 连接

    private static final string solrurl="http://localhost:8983/solr/bless";

    //创建solrclient同时指定超时时间,不指定走默认配置
    private static httpsolrclient client=new httpsolrclient.builder(solrurl)
            .withconnectiontimeout(10000)
            .withsockettimeout(60000).build();

 

3.2.1 solrj 查询

    @test
    public void querysolr() throws exception{
        //封装查询参数
        solrquery query = new solrquery("*:*");
        //添加需要回显得内容
        query.addfield("id");
        query.addfield("blesscontent");
        query.addfield("blesstime");
        query.setrows(20);//设置每页显示多少条
        //执行查询返回queryresponse
        queryresponse response = client.query(query);
        //获取doc文档
        solrdocumentlist documents = response.getresults();
        for(solrdocument solrdocument:documents){
            system.out.println(solrdocument.get("id"));
            system.out.println(solrdocument.get("blesscontent"));
            system.out.println(solrdocument.get("blesstime"));
        }
        //关闭资源
        client.close();
    }

 测试信息

solr7.4.0+mysql+solrj(简而优美)

3.2.2 solrj 增加/修改     修改是id不变其他字段变更

   @test
    public void solradd() throws exception{
        //创建文档doc
        solrinputdocument doc = new solrinputdocument();
        doc.addfield("id", 21);
        doc.addfield("blesscontent", "solrj add");
        doc.addfield("blesstime",new date());
        //添加到client
        updateresponse updateresponse = client.add(doc);
        //索引文档必须commit
        client.commit();
    }

 在管理端查看一下刚才添加的信息

 solr7.4.0+mysql+solrj(简而优美)

 

 3.2.3 solrj 删除  删除有3种方式

   @test
    public void solrdelete() throws exception{
        //1 通过id 删除
        client.deletebyid("1");
        //2 通过id list 删除
        arraylist<string> ids = new arraylist<string>();
        ids.add("2");
        ids.add("3");
        client.deletebyid(ids);
        //3 通过 查询信息删除
        client.deletebyquery("id:4");
        // 提交
        client.commit();
        // 关闭资源
        client.close();
    }

 3.3 solrj  javabean 整合应用   

solrj支持通过@field注解隐式转换文档与任何类每个实例变量在java对象可以映射到一个相应的solr字段中,使用 field注解

solr的fieldtype属性 javabean 属性类型
string string
boolean boolean
pint integer
pdouble double
plong long
pfloat float
pdate date

 

 

 

 

 

 

 

 

创建实体类:

public class bless {

    @field
    private string id;

    @field
    private string blesscontent;

    @field
    private date blesstime;


    public string getid() {
        return id;
    }

    public void setid(string id) {
        this.id = id;
    }

    public string getblesscontent() {
        return blesscontent;
    }

    public void setblesscontent(string blesscontent) {
        this.blesscontent = blesscontent;
    }

    public date getblesstime() {
        return blesstime;
    }

    public void setblesstime(date blesstime) {
        this.blesstime = blesstime;
    }


}

 

3.3.1 solrj + javabean 查询

    @test
    public void querybean() throws exception{
        solrquery query = new solrquery("*:*");
        //添加需要回显得内容
        query.addfield("id");
        query.addfield("blesscontent");
        query.addfield("blesstime");
        query.setrows(20);//设置每页显示多少条
        //执行查询返回queryresponse
        queryresponse response = client.query(query);
        //获取doc文档
        list<bless> blesslist=response.getbeans(bless.class);
        for(bless bless:blesslist){
            system.out.println(bless.getid());
            system.out.println(bless.getblesscontent());
            system.out.println(bless.getblesstime());
        }
        client.close();
    }

 

3.3.2 solrj + javabean 增加

    @test
    public void addbean() throws exception{
        bless bless=new bless();
        bless.setid("19");
        bless.setblesscontent("solr java bean add");
        bless.setblesstime(new date());
        //添加对象
        updateresponse response = client.addbean(bless);
        //提交操作
        client.commit();
        //关闭资源
        client.close();
    }

 

至此,solr 简单应用已经介绍完毕。本篇文章属于简单优美型,并未深入探索,希望能帮助到各位同学。如需帮助可在博客下方留言。