es

117 阅读5分钟

安装

解压

tar -zxvf elasticsearch-7.4.2-linux-x86_64.tar.gz

移动解压后的es文件夹

mv elasticsearch-7.4.2 /usr/local/

cd /usr/local/

ES 目录介绍

  • bin:可执行文件在里面,运行es的命令就在这个里面,包含了一些脚本文件等
  • config:配置文件目录
  • JDK:java环境
  • lib:依赖的jar,类库
  • logs:日志文件
  • modules:es相关的模块
  • plugins:可以自己开发的插件
  • data:这个目录没有,自己新建一下,后面要用 -> mkdir data,这个作为索引目录
 mkdir data

修改核心配置文件 elasticearch.yml

cd /usr/local/elasticsearch-7.4.3/config

cluster.name: imooc-elasticsearch

node.name: es-node0

image.png

修改data数据保存地址

path.data: /usr/local/elasticsearch-7.4.2/data

修改日志数据保存地址

/usr/local/elasticsearch-7.4.2/logs

image.png

绑定es网络ip,原理同redis

network.host: 0.0.0.0

默认端口号,可以自定义修改

image.png 集群节点,名字可以先改成之前的那个节点名称

cluster.initial_master_nodes: ["es-node0"]

image.png

4、修改JVM参数

cd /usr/local/elasticsearch-7.4.2/config
vim jvm.options

image.png

默认xms和xmx都是1g,虚拟机内存没这么大,修改一下即可

image.png

添加用户

ES不允许使用root操作es,需要添加用户,操作如下

useradd esuser
chown -R esuser:esuser /usr/local/elasticsearch-7.4.2
su esuser
whoami

启动ES

cd /usr/local/elasticsearch-7.4.2/bin
./elasticsearch

如果出现如下错误:

image.png

修改limits.conf

切换到root

su 
vim /etc/security/limits.conf

在最后增加如下代码

* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096

image.png

修改sysctl.conf

vim /etc/sysctl.conf

image.png

刷新配置

sysctl -p

jdk错误

image.png

cd /usr/local/elasticsearch-7.4.2/bin
vim elasticsearch

image.png

export JAVA_HOME=/usr/local/elasticsearch-7.4.2/jdk
export PATH=$JAVA_HOME/bin:$PATH

if [ -x "$JAVA_HOME/bin/java" ]; then
        JAVA="/usr/local/elasticsearch-7.4.2/jdk/bin/java"
else
        JAVA=`which java`
fi

启动成功

你的虚拟机ip+端口号9200

image.png

停止es

ctrl+c

后台启动

./elasticsearch -d

image.png

杀进es进程

jps
kill xx

image.png

elasticsearch-head

-   `git clone git://github.com/mobz/elasticsearch-head.git`
-   `npm install`
-   npm run start

image.png

image.png

//注意:后面要有空格
http.cors.enabled: true
http.cors.allow-origin: "*"

重启es

image.png

使用

创建索引

http://192.168.153.129:9200/index_temp

image.png

获取索引信息

http://192.168.153.129:9200/index_temp

image.png

查看集群健康

http://192.168.153.129:9200/_cluster/health

image.png

查看索引

http://192.168.153.129:9200/_cat/indices?v

image.png

springboot集成es

springboot

pom.xml

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

application.yml

server:
  port: 8033
# 虽然与数据库存无关,但是如果有连也要配置
spring:
  datasource:                                           # 数据源的相关配置
    type: com.zaxxer.hikari.HikariDataSource          # 数据源类型:HikariCP
    driver-class-name: com.mysql.jdbc.Driver          # mysql驱动
    url: jdbc:mysql://localhost:3306/foodie-shop-dev?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true
    username: root
    password: xxx
  data:
    elasticsearch:
      cluster-nodes: 192.168.153.136:9300 #此处要写9300
      cluster-name: imooc-application

es配置

image.png

测试

创建索引

image.png

image.png

image.png

删除索引

删除前

image.png

执行删除

image.png

删除后

image.png

更新doc

更新前

image.png

更新后

image.png

查询文档

image.png

删除文档

image.png

文档分页查询

image.png

高亮显示

image.png

排序

image.png

分词与内置分词器

1、什么是分词?

把文本转换为一个个的单词,分词称之为analysis。es默认只对英文语句做分词,中文不支持,每个中文字都会被拆分为独立的个体

image.png

中文分词

配置

下载相同版本的中文分词包

image.png

image.png

解决并移动到对应文件夹

unzip elasticsearch-analysis-ik-6.4.3.zip -d /usr/local/elasticsearch-6.4.3/plugins/ik

重启

jps
kill xx
./elasticsearch -d

对比

image.png

image.png

自定义模板配置中文分词

Logstash

1、Logstash

Logstash是elastic技术栈中的一个技术。它是一个数据采集引擎,可以从数据库采集数据到es中。我们可以通过设置自增id主键或者时间来控制数据的自动同步,这个id或者时间就是用于给logstash进行识别的。

  • id:假设现在有1000条数据,Logstatsh识别后会进行一次同步,同步完会记录这个id为1000,以后数据库新增数据,那么id会一直累加,Logstatsh会有定时任务,发现有id大干1000了,则增量加入到es中;
  • 时间:同理,一开始同步1000条数据,每条数据都有一个字段,为time,初次同步完毕后,记录这个time,下次同步的时候进行时间比对,如果有超过这个时间的,那么就可以做同步,这里可以同步新增数据,或者修改元数据,因为同一条数据的时间更改会被识别,而id则不会。

2、安装Logstash

官方链接:www.elastic.co/cn/download…

注:使用Logstatsh的版本号与elasticsearch版本号需要保持一致

3、插件 logstash-input-jdbc

本插件用干同步,es6.x起自带,这个是集成在了loastash中的。所以直接配罟同步数据库的配署文件即口

4、创建索引

同步数据到es中,前提得要有索引,这个需要手动先去创建,名字随意。比如: foodie-items

Logstash同步库配置

同步本地mysql中的foodie-shop-dev库中的items表到虚拟机中的es

创建sync目录

mkdir /usr/local/logstash-6.4.3/sync

foodie-items.sql

 SELECT
     i.id as itemId,
     i.item_name as itemName,
     i.sell_counts as sellCounts,
     ii.url as imgUrl,
     tempSpec.price_discount as price,
     i.updated_time as updated_time
 FROM
     items i
 LEFT JOIN
     items_img ii
 on
     i.id = ii.item_id
 LEFT JOIN
     (SELECT item_id,MIN(price_discount) as price_discount from items_spec GROUP BY item_id) tempSpec
 on
     i.id = tempSpec.item_id
 WHERE
     ii.is_main = 1
     and
     i.updated_time >= :sql_last_value

logstash-db-sync.conf

input {
    jdbc {
        # 设置 MySql/MariaDB 数据库url以及数据库名称
        jdbc_connection_string => "jdbc:mysql://192.168.2.156:3306/foodie-shop-dev?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useUnicode=true&useSSL=false&zeroDateTimeBehavior=convertToNull"
        # 用户名和密码
        jdbc_user => "root"
        jdbc_password => "123456"
        # 数据库驱动所在位置,可以是绝对路径或者相对路径
        jdbc_driver_library => "/usr/local/logstash-6.4.3/sync/mysql-connector-java-5.1.41.jar"
        # 驱动类名
        jdbc_driver_class => "com.mysql.jdbc.Driver"
        # 开启分页
        jdbc_paging_enabled => "true"
        # 分页每页数量,可以自定义
        jdbc_page_size => "10000"
        # 执行的sql文件路径
        statement_filepath => "/usr/local/logstash-6.4.3/sync/foodie-items.sql"
        # 设置定时任务间隔  含义:分、时、天、月、年,全部为*默认含义为每分钟跑一次任务
        schedule => "* * * * *"
        # 索引类型
        type => "_doc"
        # 是否开启记录上次追踪的结果,也就是上次更新的时间,这个会记录到 last_run_metadata_path 的文件
        use_column_value => true
        # 记录上一次追踪的结果值
        last_run_metadata_path => "/usr/local/logstash-6.4.3/sync/track_time"
        # 如果 use_column_value 为true, 配置本参数,追踪的 column 名,可以是自增id或者时间
        tracking_column => "updated_time"
        # tracking_column 对应字段的类型
        tracking_column_type => "timestamp"
        # 是否清除 last_run_metadata_path 的记录,true则每次都从头开始查询所有的数据库记录
        clean_run => false
        # 数据库字段名称大写转小写
        lowercase_column_names => false
    }
}
output {
    elasticsearch {
        # es地址
        hosts => ["192.168.153.136:9200"]
        # 同步的索引名
        index => "foodie-items"
        # 设置_docID和数据相同
        document_id => "%{itemId}"
    }
    # 日志输出
    stdout {
        codec => json_lines
    }}

同步脚本

./logstash -f /usr/local/logstash-6.4.3/sync/logstash-db-sync.conf

常见错误

数据库的服务器不允许部署项目的服务器进行远程连接

image.png

解决办法

USE mysql;
SHOW TABLES;
select host from user;
update user set host ='%' where user ='root';  //修改可以远程访问
flush privileges; //刷新

springboog集成es实现搜索

image.png

image.png

image.png

排序

image.png

高亮

修改前

image.png

修改后

image.png