elasticsearch 简介、安装与使用

简介

Elasticsearch是什么?

Elasticsearch 是一个分布式的免费开源搜索和分析引擎,适用于包括文本、数字、地理空间、结构化和非结构化数据等在内的所有类型的数据。Elasticsearch 在 Apache Lucene 的基础上开发而成,由 Elasticsearch N.V.(即现在的 Elastic)于 2010 年首次发布。Elasticsearch 以其简单的 REST 风格 API、分布式特性、速度和可扩展性而闻名,是 Elastic Stack 的核心组件;Elastic Stack 是一套适用于数据采集、扩充、存储、分析和可视化的免费开源工具。人们通常将 Elastic Stack 称为 ELK Stack(代指 Elasticsearch、Logstash 和 Kibana),目前 Elastic Stack 包括一系列丰富的轻量型数据采集代理,这些代理统称为 Beats,可用来向 Elasticsearch 发送数据。

Elasticsearch相关概念说明

概念说明
索引库(indices)indices是index的复数,代表许多的索引
类型(type)类型是模拟mysql中的table概念,一个索引库下可以有不同类型的索引(目前6.X以后的版本只能有一个类型),类似数据库中的表概念。数据库表中有表结构,也就是表中每个字段的约束信息;索引库的类型中对应表结构的叫做映射(mapping),用来定义每个字段的约束。
文档(document)存入索引库原始的数据。比如每一条商品信息,就是一个文档
字段(field)文档中的属性
映射配置(mappings)字段的数据类型、属性、是否索引、是否存储等特性

Elasticsearch和mysql的对应关系

ElasticsearchMySQL
索引库(indices)Database 数据库
类型(type)Table 数据表
文档(Document)Row 行
域字段(Field)Columns 列
映射配置(mappings)每个列的约束(类型、长度)

安装

1.下载

es官网下载地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch

最新是 7.12.1 版本,这里选择 7.12.0 搭建案例 demo。

下载好了后,上传到 linux,解压压缩包在 /opt 下,

执行命令,启动 es,

sh /opt/elasticsearch-7.12.0/bin/elasticsearch

启动报错:can not run elasticsearch as root

es 不是以 root 用户启动,所以我们需要新建一个 es 用户来操作,

[root@localhost bin]# adduser es #添加es用户
[root@localhost bin]# passwd es #设置密码
[root@localhost bin]# chown -R es /opt/elasticsearch-7.12.0 #将对应的文件夹权限赋给该用户

创建好 es 用户后,切换到该用户重新启动 es,

[root@localhost bin]# su es
[es@localhost bin]$ sh /opt/elasticsearch-7.12.0/bin/elasticsearch

打开浏览器访问 ip:9200,浏览器提示无法连接,这里需要给 es 配置外网访问。编辑 elasticsearch.yml,可以看到配置中全是注释的配置,咱们不动那些注释过的,只添加自己的新配置。添加一行配置:network.host: 0.0.0.0

[es@localhost root]$ vim /opt/elasticsearch-7.12.0/config/elasticsearch.yml

然后再次启动 es,发现这次启动失败了,信息如下

不过不慌,小问题,切换到 root 用户下,编辑 /etc/security/limits.conf 文件,增加配置,用户退出后重新登录生效。

*               soft    nofile          65536
*               hard    nofile          65536

再次编辑 /etc/sysctl.conf 文件,增加配置 vm.max_map_count=262144,保存退出后然后执行 sysctl -p 使其生效。

切换到 es 用户,再次启动 es,依旧报错,信息如下:

集群的节点问题,继续去修改 elasticsearch.yml,追加配置

cluster.initial_master_nodes: ["node-1"]

保存退出后。启动 es,不报错并且启动成功。

打开浏览器访问 ip:9200,返回一个 json 字符串,es 启动成功。

2.使用

从这个网址构建一个springboot工程:https://start.spring.io/

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.4.5</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>demo-es</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>demo</name>
	<description>Demo project for Spring Boot</description>
	<properties>
		<java.version>1.8</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>

		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>

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

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<excludes>
						<exclude>
							<groupId>org.projectlombok</groupId>
							<artifactId>lombok</artifactId>
						</exclude>
					</excludes>
				</configuration>
			</plugin>
		</plugins>
	</build>

</project>

application.yml

spring:
#  data:
#    elasticsearch:
#      client:
#        reactive:
#          endpoints: 192.168.59.128:9200
  elasticsearch:
    rest:
      uris: 192.168.59.128:9200

编写实体类 User,对应与 es 中的索引。

package com.example.demo.controller.entity;

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;

/**
 * @author 相柳
 * @date 2021/5/21
 */
@Data
@Document(indexName = "user")
public class User {

    @Id
    private String username;

    private String password;

    private String info;
}

新建 EsController 和 EsService,其中 EsService 继承自 ElasticsearchRepository。

package com.example.demo.controller;

import com.example.demo.controller.entity.User;
import com.example.demo.controller.service.EsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Optional;

@RestController
public class EsController {

    @Autowired
    private EsService esService;

    @GetMapping("/getFromEs")
    public String getFromEs(@RequestParam String userName) {
        Optional<User> byId = esService.findById(userName);
        if (byId.isPresent()) {
            return byId.get().toString();
        }
        return "failed";
    }

    @GetMapping("/insertEs")
    public String insertEs() {
        User user = new User();
        user.setUsername("jack");
        user.setPassword("123");
        user.setInfo("jack 666");
        esService.save(user);
        return "success";
    }

}
package com.example.demo.controller.service;


import com.example.demo.controller.entity.User;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

/**
 * @author 相柳
 * @date 2021/5/21
 */
public interface EsService extends ElasticsearchRepository<User, String> {
}

好,接下来启动项目,启动成功依次执行:

http://localhost:8080/insertEs

http://localhost:8080/getFromEs?userName=jack

分别插入 jack,然后查找 jack。结果如下:

至此,整合完成,一个简单的 es demo 已经搭建出来了。

虽然很简单,但是正是有了这个简单开头,对于后续各种复杂的问题,才有解决的希望,才能有迹可循。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值