目录:

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支持通过@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 简单应用已经介绍完毕。本篇文章属于简单优美型,并未深入探索,希望能帮助到各位同学。如需帮助可在博客下方留言。

最新文章

  1. .NetCore中的日志(2)集成第三方日志工具
  2. MySQL 查询所有子级函数
  3. 【转】面向对象设计的SOLID原则
  4. Bootstrap之BootstrapDialog
  5. 2013年第四届蓝桥杯C/C++程序设计本科B组决赛
  6. bzoj 2957: 楼房重建 线段树
  7. LibLinear(SVM包)的MATLAB安装
  8. Python基础入门教程
  9. IOS动态自适应标签实现
  10. Python爬虫学习之使用beautifulsoup爬取招聘网站信息
  11. Oracle 所有的权限列表
  12. BZOJ.1178.[APIO2009]会议中心(贪心 倍增)
  13. kmp循环节
  14. tomcat 服务器线程问题
  15. Java分为三个体系
  16. IOS学习经验总结
  17. 【AS3 Coder】任务四:噪音的魅力(中)
  18. $ 和getElementId的区别 / 一个jquery对象的原型
  19. BZOJ 1500 [NOI2005]维修数列 FHQ Treap
  20. hdu 1573(中国剩余定理)

热门文章

  1. MongoDB数据库 5分钟快速上手
  2. 结构型模式 -- 代理模式(静态代理&amp;动态代理)
  3. 【转载】每天一个linux命令(11):nl命令
  4. DHCP部署与安全
  5. springMVC-11-验证码
  6. 传统二三层转发融合SDN Openflow协议的Hybrid交换机转发流程
  7. 在java中为啥要重写toString 方法?
  8. fiddler抓取手机模拟器数据
  9. vulnhub-XXE靶机渗透记录
  10. python里面的垃圾回收机制