ElasticSearch和ElasticsearchRepository的集成与使用

1.安装jdk1.8

yum install java-1.8.0-openjdk* -y

2. 安装ElasticSearch

创建es用户
groupadd esgroup
useradd -g esgroup es
passwd es

cd /usr/local/src/es
curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.0.tar.gz
tar -xvzf elasticsearch-6.6.0.tar.gz
mv ./elasticsearch-6.6.0 ./6.6.0 
chown -R es:esgroup ./6.6.0

修改配置参数

vim /usr/local/src/es/6.6.0/config/elasticsearch.yml
# 网络设置
network.host: 0.0.0.0
http.port: 9200

cluster.initial_master_nodes: ["node-1"]

3. 启动


启动
su es
cd /usr/local/src/es
./bin/elasticsearch #调试没有问题后在后台启动
./bin/elasticsearch -d  #后台启动

 

4 脚本启动

#!/bin/sh
#chkconfig: 2345 80 05
#description: elasticsearch

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64
export JAVA_BIN=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH

case "$1" in
start)
    su es<<!
    cd /usr/local/src/es/6.6.0/
    ./bin/elasticsearch -d
!
    echo "elasticsearch startup"
    ;;
stop)
    es_pid=`ps aux|grep elasticsearch | grep -v 'grep elasticsearch' | awk '{print $2}'`
    kill -9 $es_pid
    echo "elasticsearch stopped"
    ;;
restart)
    es_pid=`ps aux|grep elasticsearch | grep -v 'grep elasticsearch' | awk '{print $2}'`
    kill -9 $es_pid
    echo "elasticsearch stopped"
    su es<<!
    cd /usr/local/src/es/6.6.0/
    ./bin/elasticsearch -d
!
    echo "elasticsearch startup"
    ;;
*)
    echo "start|stop|restart"
    ;;
esac

exit $?

脚本中的各种路径需要根据自己服务器修改。

为启动脚本增加执行权限:chmod +x /etc/init.d/elastisearch

配置开机启动es:chkconfig --add elasticsearch

重启机器:reboot

检查ES是否启动:jps 查看是否有 Elasticsearch 服务

 

常见问题

java.lang.RuntimeException: can not run elasticsearch as root 不能使用root用户启动

 

max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536] 每个进程最大同时打开文件数太小,可通过下面2个命令查看当前数量

ulimit -Hn

ulimit -n

解决  

ulimit -Hn 65536

ulimit -n 65536

max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

解决:

切换到root用户

执行命令:

sysctl -w vm.max_map_count=262144

查看结果:

sysctl -a|grep vm.max_map_count

显示:

vm.max_map_count = 262144

上述方法修改之后,如果重启虚拟机将失效,所以:

解决办法:

在   /etc/sysctl.conf文件最后添加一行

vm.max_map_count=262144

保存后执行

sysctl -p

即可永久修改

 

 

4.安装es可视化管理工具 elasticsearch-head

安装node.js

https://blog.csdn.net/Y_vocefenrir/article/details/105296295

下载elasticsearch-head

https://codeload.github.com/mobz/elasticsearch-head/zip/master

修改Gruntfile.js文件:

connect: {
			server: {
				options: {
					hostname: '*' ,
					port: 9100,
					base: '.',
					keepalive: true
				}
			}
		}

执行 npm install ,npm run start

 

 

 

访问 http://localhost:9100

填写真实的es地址,点击连接,这里可能出现跨域问题所以要修改es的配置文件elasticsearch.yml

 

vim ./es地址/config/elasticsearch.yml

http.cors.enabled: true
http.cors.allow-origin: "*"

5 springboot集成ElasticsearchRepository

引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    <version>2.1.8.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-commons</artifactId>
    <version>2.2.4.RELEASE</version>
</dependency>

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

添加配置

spring:
 data:
   elasticsearch:
     cluster-nodes: 192.168.137.129:9300
     repositories:
       enabled: true

创建ApiLog

package com.example.demo;

/**
 * Author : 尤毅鹤
 * Date: 2020/04/07 15:19
 * Description: <描述>
 */
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;

@Document(indexName = "apilog_index", type = "apilog")
public class ApiLog {
    private static final long serialVersionUID = -382318121710813866L;
    @Id
    private long id;

    private int uid;
    private int app_id;
    private String url;
    private long c_time;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public int getUid() {
        return uid;
    }

    public void setUid(int uid) {
        this.uid = uid;
    }

    public int getApp_id() {
        return app_id;
    }

    public void setApp_id(int app_id) {
        this.app_id = app_id;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public long getC_time() {
        return c_time;
    }

    public void setC_time(long c_time) {
        this.c_time = c_time;
    }

    public ApiLog() {

    }

    public ApiLog(long id, int uid, int app_id, String url, long c_time) {
        this.id = id;
        this.uid = uid;
        this.app_id = app_id;
        this.url = url;
        this.c_time = c_time;
    }

    @Override
    public String toString() {
        return "ApiLog{" +
                "id=" + id +
                ", uid=" + uid +
                ", app_id=" + app_id +
                ", url='" + url + '\'' +
                ", c_time=" + c_time +
                '}';
    }
}

ApiLogService

package com.example.demo;

import java.util.ArrayList;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;


@Service
public class ApiLogService {

    @Autowired
    private ApiLogSearchRepository repository;

    /**
     * 删除文档
     * @param id
     * @return
     */
    public boolean deleteApiLog(Long id) {
        try {
            repository.deleteById(id);
        } catch (Exception ex) {
            ex.printStackTrace();
            return false;
        }
        return true;
    }

    /**
     * 插入文档
     * @param aLog
     * @return
     */
    public ApiLog saveApiLog(ApiLog aLog) {
        ApiLog apiLog = new ApiLog();
        try {
            apiLog = repository.save(aLog);
        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
        return apiLog;
    }

    /**
     * 按id查询
     * @param id
     * @return
     */
    public ApiLog findOneApiLog(long id) {
        ApiLog apiLog = new ApiLog();
        try {
            apiLog = repository.findById(id).get();
        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
        return apiLog;
    }

    /**
     * 查询全部文档
     * @return
     */
    public List<ApiLog> findAllApiLog() {
        List<ApiLog> list = new ArrayList<>();
        try {
            Iterable<ApiLog> aIterable = repository.findAll();
            for (ApiLog apiLog : aIterable) {
                list.add(apiLog);
            }
        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
        return list;
    }

    /**
     * 按条件过滤查询
     * @param b_time
     * @param e_time
     * @return
     */
    public List<ApiLog> findApiLogByDate(String b_time,String e_time) {
        List<ApiLog> list = new ArrayList<>();
        try {
            // 单个字符串
//       QueryBuilder qb0 = QueryBuilders.termQuery("id", "0");
            // 闭区间
            QueryBuilder qb1 = QueryBuilders.rangeQuery("c_time").from(b_time).to(e_time);
            // 大于
            QueryBuilder qb2 = QueryBuilders.rangeQuery("uid").gt(0);
            // 过滤多条件
            QueryBuilder qb = QueryBuilders.boolQuery().must(qb1).must(qb2);

            Iterable<ApiLog> aIterable = repository.search(qb);
            for (ApiLog apiLog : aIterable) {
                list.add(apiLog);
            }
        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
        return list;
    }
}

 

ApiLogSearchRepository

package com.example.demo;

import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

public interface ApiLogSearchRepository extends ElasticsearchRepository<ApiLog, Long>{

}

 

测试

package com.example.demo;

import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = DemoApplication.class)
class DemoApplicationTests {
    @Autowired
    ApiLogController apiLogController;
    @Test
    void contextLoads() {
        ApiLog apiLog = apiLogController.saveApiLog(new ApiLog(System.currentTimeMillis(), 10, 30, "http://www.baidu.com", System.currentTimeMillis()));
        System.out.println(apiLog);
    }

}

查看

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值