Apache Solr 9.1-(三)集群模式下通过Http API操作Apache Solr
Solr是一个基于Apache Lucene的搜索服务器,Apache Lucene是开源的、基于Java的信息检索库,Solr能为用户提供无论在任何时候都可以根据用户的查询请求返回结果,它被设计为一个强大的文档检索引擎。
Apache Solr 9.1对外提供的客户端接口方式主要有
- 1). SolrJ: 此方案也是官方建议采用的方案。
优点:集成简单、方便,接口都已被进行了高度封装,使用起来非常方便、简便;
缺点:对JDK版本有要求,不能低于JDK11,导致应用程序还未升级到JDK11的将无法使用SolrJ;- 2). HttpUrl: 此方案通过GET、POST、DELETE等方式通过提交http Url就可以实现所有的接口功能;
优点:对JDK版本无要求,只要通过http客户端通过url+参数值的方式与solr服务交互,无技术难度;
缺点:相对SolrJ来说,对接口调用略显繁琐,主要代码量集中于Http客户端,接口部分主要是封装JSON或XML的参数;- 本文将针对Solr服务提供Http接口进行验证。
Apache Solr系列文章:
1、Apache Solr 9.1-(一)初体验单机模式运行
2、Apache Solr 9.1-(二)集群模式运行
3、Apache Solr 9.1-(三)集群模式下通过Http API操作Apache Solr
目录
- Apache Solr 9.1-(三)集群模式下通过Http API操作Apache Solr
- 一、准备
- 1、各组件版本说明
- 2、部署架构
- 3、硬件环境准备
- 4、各服务器节点服务部署情况
- 5、Apache Solr 9.1集群模式环境搭建
- 二、Zookeeper管理
- 1、Zookeeper可视化客户端 - ZooInspector
- 1)、下载
- 2)、运行
- 2、将本地配置文件、目录上传到zookeeper集群服务指定的目录下
- 1)、将本地配置文件上传到zookeeper集群服务指定的目录下
- 2)、将本地配置文件整个目录上传到zookeeper集群服务指定的目录下
- 三、Collection操作接口
- 1、创建Collection
- 2、删除Collection
- 3、获取所有Collection
- 4、备份Collection
- 5、获取每次备份的信息
- 6、将备份还原到Collection中
- 7、删除备份文件
- 四、Document的操作接口
- 1、批量插入数据
- 2、删除数据
- 1). 根据主键、ID删除Document
- 2). 根据查询条件删除Document
- 3、更新数据
- 4、查询数据
一、准备
1、各组件版本说明
序号 | 软件名称 | 版本 | 说明 |
---|---|---|---|
1 | JDK | 11 | Apache Solr9.1要求JDK的版本最低为11,可以是openjdk |
2 | Apache Solr | 9.1 | 基于Apache Lucene搜索服务器 |
3 | IK-Analyzer | 8.5.0 | 中文分词器 |
4 | Zookeeper | 2.4.15 | |
5 | ZooInspector | - | Zookeeper可视化客户端 |
2、部署架构
3、硬件环境准备
序号 | IP | HostName | 操作系统 | 说明 |
---|---|---|---|---|
1 | 192.168.2.181 | hnode1 | CentOS7_x64 | |
2 | 192.168.2.182 | hnode2 | CentOS7_x64 | |
3 | 192.168.2.183 | hnode3 | CentOS7_x64 |
4、各服务器节点服务部署情况
序号 | 服务节点 | Zookeeper节点 | solr节点 |
---|---|---|---|
1 | hnode1 | √ | √ |
2 | hnode2 | √ | √ |
3 | hnode3 | √ | √ |
5、Apache Solr 9.1集群模式环境搭建
关与Apache Solr 9.1集群模式环境搭建请参见【Apache Solr 9.1-(二)集群模式运行】
二、Zookeeper管理
1、Zookeeper可视化客户端 - ZooInspector
说明:
ZooInspector提供的功能:
1). 连接/断开Zookeeper服务(单节点服务或集群服务);
2). 查看Zookeeper服务中存放的目录和文件及内容;
3). 新建节点;
4). 删除节点;
1)、下载
点击此处【ZooInspector】进行下载
2)、运行
解压后进入build目录,执行:
java -jar zookeeper-dev-ZooInspector.jar
说明:
Connect String:Zookeeper服务器地址
1). 如果Zookeeper服务是单节点,则在Connect String处只写一个ip:端口即可;
2). 如果Zookeeer服务是集群模式,则在Connect String处需要将所有节点的地址都写上,并以[,]号分隔;
连接成功如下图所示:
2、将本地配置文件、目录上传到zookeeper集群服务指定的目录下
在本节中实现上传文件和目录主要是通过Apache Solr中自带的zookeeper客户端工具脚本zkcli.sh1,与Zookeeper安装目录下zkCli.sh2是不同的脚本,本节中使用的是zkcli.sh,并不是Zookeeper的zkCli.sh。
1)、将本地配置文件上传到zookeeper集群服务指定的目录下
[root@hnode1 solr]# cd /opt/solr/solr-9.1.0/server/scripts/cloud-scripts
[root@hnode1 cloud-scripts]# ./zkcli.sh -zkhost hnode1:2181,hnode2:2181,hnode3:2181 -cmd putfile /solr/configs/_default/managed-schema.xml /opt/solr/conf/managed-schema.xml
2)、将本地配置文件整个目录上传到zookeeper集群服务指定的目录下
在本例中将演示将本地/opt/solr/conf整个目录下的文件上传到zookeeper集群服务的/solr/configs/chatmessage目录下,且/solr/configs/chatmessage节点不需要提前创建
[root@hnode1 solr]# cd /opt/solr/solr-9.1.0/server/scripts/cloud-scripts
# 下面通过zkcli.sh脚本连接zookeeper服务的/solr/目录下后,将本地/opt/solr/conf/目录下所有文件以配置文件的方式上传到/solr/configs/chatmessage节点下
[root@hnode1 cloud-scripts]# ./zkcli.sh -zkhost hnode1:2181,hnode2:2181,hnode3:2181/solr -cmd upconfig -confdir /opt/solr/conf -confname chatmessage
三、Collection操作接口
关与Collection详细的接口说明请参见【Apache Solr 9.1 Collection管理文档】
1、创建Collection
v2版接口
curl -X POST http://localhost:8983/api/collections -H 'Content-Type: application/json' -d '
{
"create": {
"name": "chatmessage",
"config": "chatmessage",
"numShards": 1
}
}
- 上面接口参数中config参数指定的就是Zookeeper服务上存放的此collection对应的配置节点名称,如果不指定将从_default下复制一份做为此collection的配置,当删除此collection时,新复制的配置目录也会一起被删除;
- 创建Collection的前提是需要先在Zookeeper集群服务上存在对应此Collection的配置,所以创建collection的时候,如果zookeeper上无此collection的配置,需要先将配置上传到zookeeper集群上; 上传方法参见本文 【二、Zookeeper管理 -> 2、将本地配置文件、目录上传到zookeeper集群服务指定的目录下 -> 2)、将本地配置文件整个目录上传到zookeeper集群服务指定的目录下】 的具体操作;
2、删除Collection
curl -X DELETE http://localhost:8983/api/collections/collection名称
3、获取所有Collection
curl -X GET http://localhost:8983/api/collections
返回结果:
{
"responseHeader":{
"status":0,
"QTime":2011},
"collections":["collection1",
"example1",
"example2"]}
4、备份Collection
curl -X POST http://localhost:8983/api/collections -H 'Content-Type: application/json' -d '
{
"backup-collection": {
"name": "techproducts_backup",
"collection": "techproducts",
"location": "file:///path/to/my/shared/drive"
}
}
'
5、获取每次备份的信息
curl -X POST http://localhost:8983/v2/collections/backups -H 'Content-Type: application/json' -d '
{
"list-backups" : {
"name": "myBackupName",
"location": "/path/to/my/shared/drive"
}
}
'
6、将备份还原到Collection中
可以将备份的Collection的索引数据和关联的配置还原到指定的Collection中
curl -X POST http://localhost:8983/v2/collections/backups -H 'Content-Type: application/json' -d '
{
"list-backups" : {
"name": "myBackupName",
"location": "/path/to/my/shared/drive"
}
}
'
7、删除备份文件
curl -X POST http://localhost:8983/v2/collections/backups -H 'Content-Type: application/json' -d '
{
"delete-backups" : {
"name": "myBackupName",
"location": "/path/to/my/shared/drive",
"backupId": 0
}
}
'
四、Document的操作接口
Apache Solr 9.1 插入、更新、删除Document记录使用的URL都是:http://solr服务ip:端口/solr/collection名称/update
1、批量插入数据
例如:
curl -X POST -H 'Content-Type: application/json' 'http://localhost:8983/solr/my_collection/update' --data-binary '
[
{
"id": "1",
"title": "Doc 1"
},
{
"id": "2",
"title": "Doc 2"
}
]'
2、删除数据
1). 根据主键、ID删除Document
例如:[删除id值为ID的Document]
curl -X POST -H 'Content-Type: application/json' 'http://localhost:8983/solr/my_collection/update' --data-binary '
{"delete": { "id":"ID" }}'
2). 根据查询条件删除Document
例如:[删除所有isRead字段值为0的Document]
curl -X POST -H 'Content-Type: application/json' 'http://localhost:8983/solr/my_collection/update' --data-binary '
{"delete": {"query":"isRead:0"}}'
3、更新数据
例如:
curl -X POST -H 'Content-Type: application/json' 'http://localhost:8983/solr/my_collection/update' --data-binary '
[
{
"id": "1",
"title": "Doc 1"
},
{
"id": "2",
"title": "Doc 2"
}
]'
4、查询数据
例如:
curl http://localhost:8983/solr/my_collection/query -d '
{
"query" : "memory",
"filter" : "inStock:true"
}'
zkcli.sh:是Apache Solr中自带的zookeeper客户端工具脚本,位置在solr-9.1.0/server/scripts/cloud-scripts/目录下。 ↩︎
zkCli.sh:是Zookeeper服务自带的客户端工具脚本,位置在apache-zookeeper-3.8.0-bin/bin/目录下。 ↩︎