solr7.4.0+mysql+solrj(简而优美)
目录:
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 并在浏览器下能访问到下图所示则表示访问成功
然后创建核心 ,这里我的核心名字叫bless solr.cmd start -c bless 。下图表示创建成功
新创建core\核心的目录位置
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下
2.2 配置连接信息
把solr-7.4.0\example\example-dih\solr\db下的文件复制到你创建的core里面 --> solr-7.4.0\server\solr\bless
打开conf目录在db-data-config.xml和managed-schema中进行配置
我的数据库表信息
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配置文件中的这个主键配置
然后去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,导入数据
查询数据库记录是否导入
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
修改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>
使用中文分析
不使用中文分析
给数据库字段配置中文分析,需要修改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(); }
测试信息
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(); }
在管理端查看一下刚才添加的信息
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支持通过
每个实例变量在java对象可以映射到一个相应的solr字段中,使用 @field注解
隐式转换文档与任何类。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 简单应用已经介绍完毕。本篇文章属于简单优美型,并未深入探索,希望能帮助到各位同学。如需帮助可在博客下方留言。