# elasticsearch-jdbc
**Repository Path**: chenzhenguo/elasticsearch-jdbc
## Basic Information
- **Project Name**: elasticsearch-jdbc
- **Description**: elasticsearch-jdbc,在elasticsearch-sql的jdbc实验特性基础上完成,可使用sql和rest api的方式执行elasticsearch操作
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 2
- **Created**: 2019-12-18
- **Last Updated**: 2025-01-23
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# elasticsearch-jdbc
2.0.x版本最先是在[elasticsearch-sql](https://github.com/NLPchina/elasticsearch-sql)的[实验特性项目](https://github.com/NLPchina/elasticsearch-sql/pull/283)的基础上修改而来,修改和补充了部分jdbc规范,使之能够和mybatis结合,sql支持度可参考elasticsearch-sql,引入了[jest](https://github.com/searchbox-io/Jest),实现了mybatis+rest api的方式操作elasticsearch。提供了Java api的工具类`ESUtil`和rest api工具类`JestUtil`。
由于和Druid数据库连接池耦合太大,在使用过程中发现了一系列问题,决定将JDBC和数据库连接池解耦。添加ElasticSearchDriver类可以直接使用Class.forName加载驱动。
3.0.0版本不再使用elasticsearch-sql实验项目关于数据库连接池的部分,依旧沿用sql解析部分的代码
### Upgrade
3.0.1 TransportClient 增加心跳监测,解决连接超时的问题。增加集群名配置
### 使用方式
#### maven依赖
```xml
wjj-maven-repo
https://raw.github.com/zhanyingf15/maven-repo/master
```
上面是在GitHub上搭建的私人仓库
```xml
com.wjj
elasticsearch-jdbc
3.0.0
```
#### application.xml
```xml
classpath*:com/**/model/es/*.xml
```
#### 添加elasticsearch.properties 配置文件到classpath
elasticsearch.properties配置文件是必须的,可以直接如上面代码引入到spring配置文件中。java.url是TransportClient的地址,http.url是REST接口地址
```properties
#es java TransportClient address,split by "," if have multi address,eg.jdbc:elasticsearch://ip1:port,ip2:port
java.url=jdbc:elasticsearch://192.168.70.128:9300
#es rest http address,split by "," if have multi address.eg http://ip1:port,http://ip2:port
http.url=http://192.168.70.128:9200
#max connection number
maxActive=20
#cluster name,ignored if you not setting
cluster.name=elasticsearch
```
#### 在mybatis中使用sql和rest api操作
```xml
PUT ${index}/${type}/${_id}?op_type=create
{
"id":"${id}",
"name":"${name}"
}
POST ${index}/${type}/${id}/_update?
{
"doc": {
"name": "${name}"
}
}
DELETE ${index}/${type}/${id}
```
上面基本列出了CRUD操作,为了方便描述,xml中的内容统称为restBody,以修改为例,`POST`为协议,`index/type/id/_update`为uri,`?`和第一个`{`间的内容为参数(即添加示例中的op_type=create,可选),`{xxx}`为restMapping,这个就是发到elasticsearch的结构体(JSON字符串)。
协议的不同,uri也会不同,参数都是可选的,协议与uri的关系如下:
- PUT:insert操作。
uri必须含有index/type[/id],id可选,默认使用es的自增长id,restMapping不能为空
- POST:select或update操作。
如果是update,uri必须满足`index/type/id/_update`格式。id可以传入多个批量更新(如更新多个文档的state),使用英文`,`分隔
如果是select,index/type都是可选,也可以传入多个index和type,用英文`,`分隔,如:index1,index2/type1,type2/_search,不能有id,必须带_search,所以select操作只能是下面几种uri
- `_search`:不指定index和type
- `index/_search`:只指定index
- `index/type/_search`:同时指定index和type
- DELETE:delete操作。
uri必须满足`index/type/id`这种格式。id可以传入多个批量删除,使用英文`,`分隔,不能根据条件删除,所以传入restMapping是无效的
- GET:通过文档id获取。
只能通过单个文档id获取,,uri必须满足`index/type/id`格式,只能指定一个id,如果需要同时通过多个id查询,使用[idsQuery](https://www.elastic.co/guide/en/elasticsearch/reference/2.4/query-dsl-ids-query.html),传入restMapping无效。
> 协议不区分大小写,参数可选。但是无论是否有参数,只要有restMapping,`?`必须带上
**注意**
所有的增删改查都可以包裹在`