一、前言
进行SpringBoot整合Spring Data ES的时候遇到了一些坑,基本都是版本控制导致,同样在搭建ES Linux环境的时候也遇到了一些坑,还是总结一下,避免新人遇到跟我一样的情况
二、ES 在Linux下的环境搭建
因为搭建其实是比较基础,且简单的,我这边只会指出容易出错的地方,避免大家遇到类似问题
https://www.elastic.co/cn/downloads/past-releases#elasticsearch
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
######elasticsearch.yml########
node.name: node-1 #配置当前es节点名称(默认是被注释的,并且默认有一个节点名)
cluster.name: my-application #默认是被注释的,并且默认有一个集群名
path.data: /home/es/data # 数据目录位置
path.logs: /home/es/logs # 日志目录位置
network.host: 0.0.0.0 #绑定的ip:默认只允许本机访问,修改为0.0.0.0后则可以远程访问cluster.initial_master_nodes: ["node-1", "node-2"] #默认是被注释的 设置master节点列表 用逗号分隔
######jvm.options#######
-Xms256m -Xmx256m #修改为自定义的的内存大小
adduser es
chown -R es:es + es目录及配置文件制定的data、logs目录同样赋予权限否则会报错
su es
./es/elasticsearch/bin/elasticsearch #启动脚本
四、ES基础概念及基础语法使用
https://www.elastic.co/guide/cn/elasticsearch/guide/current/_document_oriented.html
index,索引就类似于MySQL中的数据库的概念
type,类型就类似于MySQL中的表的概念
document,文档就类似于MySQL中的每行记录
filed,字段就类似于MySQL中的column字段属性
基础语法使用
由于ES支持RestFull API形式并结合DSL语言特性进行请求来对数据进行CRUD操作
//根据gameId、uid匹配查询
http://192.168.55.37:9200/索引/类型/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"uid": 90001388
}
},
{
"match": {
"gameId": "ioszhengbanziyunying"
}
}
]
}
}
}
//【term可用match代替】
http://192.168.55.37:9200/索引/类型/_search
{
"query": {
"term": {
"uid": 90001388
}
}
}
http://192.168.55.37:9200/索引/类型/_search
{
"query": {
"range": {
"utime": {
"gte": 1527860849,
"lte": 1533131249
}
}
}
}
// 最大/最小值查询可将sum改成max/min即可
http://192.168.55.37:9200/索引/类型/_search
{
"query": {
"term": {
"uid": 90001352
}
},
"size": 0,
"aggs": {
"payPrice_of_sum": {
"sum": {
"field": "payPrice"
}
}
}
}
curl -XDELETE 'http://192.168.55.37:9200/索引/类型/_query?pretty' -d
'{
"query": {
"bool": {
"must": [
{
"term": {
"uid": "90001794"
}
},
{
"term": {
"gameId": "1483086858573"
}
}
]
}
}
}'
GET /track_log-2020-*/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"app_id.keyword": {
"value": "34234234234234"
}
}
}
],
"filter": {
"script": {
"script": {
"source": "doc['server_time'].value.millis-doc['client_time'].value.millis>60000",
"lang":"painless"
}
}
}
}
}
}
四、后端SpringBoot整合Spring Data ES
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.0.8.RELEASEversion>
<relativePath/>
parent>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-elasticsearchartifactId>
dependency>
server:
port: 8011
spring:
data:
elasticsearch:
cluster-nodes: 192.168.245.128:9300
cluster-name: my-application
repositories:
enabled: true
@Data
@Document(indexName = "test",type = "test_table") //定义索引、类型
public class TrackerLog {
@Id
private Long id;
private Date clientTime;
private Date serverTime;
private String content;
}
// ElasticsearchRepository传实体类对象,主键类型
public interface BaseElasticsearchRepository extends ElasticsearchRepository<TrackerLog,Long> {
//自定义查询方法
List<TrackerLog> findByContent(String content);
}
这边就简单写,正常要controller - > servcie -> dao
@RestController
public class EsController {
@Autowired
private BaseElasticsearchRepository baseEs;
//创建索引、类型
@GetMapping("/index")
public String initEs(){
TrackerLog trackerLog = new TrackerLog();
baseEs.save(trackerLog);
return "true";
}
//往ES写入数据
@GetMapping("/create/{id}")
public String putEsData(@PathVariable("id") Long id){
TrackerLog trackerLog = new TrackerLog();
trackerLog.setId(id);
trackerLog.setClientTime(new Date());
trackerLog.setServerTime(new Date());
trackerLog.setContent("测试");
baseEs.save(trackerLog);
return "true";
}
//查询ES数据
@GetMapping("/get/{id}")
public TrackerLog getEsData(@PathVariable("id")Long id){
Optional<TrackerLog> datas = baseEs.findById(id);
return datas.get();
}
}
五、ES与springdataES版本控制