天天看点

Elasticsearch7.x学习总结一、官网和下载二、入门三、基本概念四、核心功能五、拓展五、碰到的问题六、ES性能优化七、常用属性和用法

一、官网和下载

官网: https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html

Spring Data Elasticsearch - 参考文档:

https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#preface.metadata

ES历史版本下载地址:https://www.elastic.co/cn/downloads/past-releases
《Elasticsearch 权威指南》中文版: https://www.elastic.co/guide/cn/index.html

1、 dockers下安装ElasticSearch

二、入门

1、Spring Boot与Elasticsearch的对应版本

Elasticsearch更新非常快,最新的7.x版本已经不支持自定义类型了,默认以**“_doc”**作为类型,一个索引只能有一个类型。

为了避免使用的Elasticsearch版本和SpringBoot采用的版本不一致导致的问题,尽量使用一致的版本。下表是对应关系:

Elasticsearch7.x学习总结一、官网和下载二、入门三、基本概念四、核心功能五、拓展五、碰到的问题六、ES性能优化七、常用属性和用法

2、目录结构

Windows 版的 Elasticsearch 压缩包,解压即安装完毕,解压后的 Elasticsearch 的目录结构如下 :

Elasticsearch7.x学习总结一、官网和下载二、入门三、基本概念四、核心功能五、拓展五、碰到的问题六、ES性能优化七、常用属性和用法

3、倒排索引

Elasticsearch7.x学习总结一、官网和下载二、入门三、基本概念四、核心功能五、拓展五、碰到的问题六、ES性能优化七、常用属性和用法

4、基本增删改查

  • elasticsearch7常见查询(term、match、bool、filter)
  • ES文档常见增删改查操作

5、使用kinbana操作

I、索引增删改

(1)创建索引

PUT lease_zh_202211
           

(2)添加索引结构

PUT /lease_zh_202211/_mapping
{
  "properties": {
    "content": {
          "type": "text",
          "analyzer": "whitespace",
          "fields": {
            "spy": {
              "type": "text",
              "analyzer": "ik_smart"
            },
            "standard": {
              "type": "text",
              "analyzer": "standard"
            },
            "fpy": {
              "type": "text",
              "analyzer": "ik_smart"
            }
          }
      },
      "path": {
        "type": "keyword",
        "index": false
      },
      "platform": {
        "type": "keyword"
      },
      "summary": {
        "type": "text",
        "term_vector": "with_positions_offsets",
        "similarity": "BM25",
        "analyzer": "standard",
        "fielddata": true
      },
      "time": {
        "type": "date",
        "format": "yyyy-MM-dd HH:mm:ss"
      },
      "title": {
        "type": "text",
        "term_vector": "with_positions_offsets",
        "similarity": "BM25",
        "analyzer": "standard"
      }
    }
  }
           

(3)删除索引

DELETE lease_zh_202211
           

(4)修改mappings字段结构(不支持)

“ es不支持直接修改mappings字段结构,可以通过_reindex 重建索引,方式修改”

II、分词器

(1)将某一字段设置多个分词器

PUT /lease_zh_202211/_mapping
{
  "properties": {
    "title": {
          "type": "text",
          "analyzer": "whitespace",
          "fields": {
            "spy": {
              "type": "text",
              "analyzer": "ik_smart"
            },
            "standard": {
              "type": "text",
              "analyzer": "standard"
            },
            "fpy": {
              "type": "text",
              "analyzer": "ik_smart"
            }
          }
    }
  }
}
           

(2)查看分词器解析效果

GET /index_kk_202109/_analyze
{
  "field": "title",
  "text": "The quick Brown Foxes."
}
           

III、新增字段

(1)新增普通字段

PUT expert_auditing/_mapping 
{ "properties":{ 
   "majorAchievement": {
      "type": "text"
    } 
  } 
}
           

(2)新增list字段

PUT expert_edit_record/_mapping 
{ "properties":{ 
    "labelInfoList": {
      "properties": {
        "label": {
          "type": "keyword"
        },
        "value": {
          "type": "keyword"
        }
      }
    }
  } 
}

           

IV、聚合查询

(1)

POST /expert/_search?size=0
{
  "aggs": {
    "types_count": {
      "value_count": {
        "field": "categoryInfoList.category1Agg"
      }
    }
  }
}
           

三、基本概念

Elasticsearch7.x学习总结一、官网和下载二、入门三、基本概念四、核心功能五、拓展五、碰到的问题六、ES性能优化七、常用属性和用法

1、文档(Document)

我们知道Java是面向对象的,而Elasticsearch是面向文档的,也就是说文档是所有可搜索数据的最小单元。ES的文档就像MySql中的一条记录,只是ES的文档会被序列化成json格式,保存在Elasticsearch中;

这个json对象是由字段组成,字段就相当于Mysql的列,每个字段都有自己的类型(字符串、数值、布尔、二进制、日期范围类型);

当我们创建文档时,如果不指定字段的类型,Elasticsearch会帮我们自动匹配类型;

每个文档都有一个ID,类似MySql的主键,咱们可以自己指定,也可以让Elasticsearch自动生成;

文档的json格式支持数组/嵌套,在一个索引(数据库)或类型(表)里面,你可以存储任意多的文档。

注意:虽然在实际存储上,文档存在于某个索引里,但是文档必须被赋予一个索引下的类型才可以。
           

2、类型(Type)

类型就相当于MySql里的表,我们知道MySql里一个库下可以有很多表,最原始的时候ES也是这样,一个索引下可以有很多类型,但是从6.0版本开始,type已经被逐渐废弃,但是这时候一个索引仍然可以设置多个类型,一直到7.0版本开始,一个索引就只能创建一个类型了(_doc)。这一点,大家要注意,网上很多资料都是旧版本的,没有对这点进行说明。

3、索引(Index)

索引就相当于MySql里的数据库,它是具有某种相似特性的文档集合。反过来说不同特性的文档一般都放在不同的索引里;
索引的名称必须全部是小写;
在单个集群中,可以定义任意多个索引;
索引具有mapping和setting的概念,mapping用来定义文档字段的类型,setting用来定义不同数据的分布。

除了这些常用的概念,我们还需要知道节点概念的作用,因此咱们接着往下看!
           

4、节点(node)

一个节点就是一个ES实例,其实本质上就是一个java进程;
节点的名称可以通过配置文件配置,或者在启动的时候使用-E node.name=ropledata指定,默认是随机分配的。建议咱们自己指定,因为节点名称对于管理目的很重要,咱们可以通过节点名称确定网络中的哪些服务器对应于ES集群中的哪些节点;
ES的节点类型主要分为如下几种:
    Master Eligible节点:每个节点启动后,默认就是Master Eligible节点,可以通过设置node.master: false 来禁止。Master Eligible可以参加选主流程,并成为Master节点(当第一个节点启动后,它会将自己选为Master节点);注意:每个节点都保存了集群的状态,只有Master节点才能修改集群的状态信息。
    Data节点:可以保存数据的节点。主要负责保存分片数据,利于数据扩展。
    Coordinating 节点:负责接收客户端请求,将请求发送到合适的节点,最终把结果汇集到一起
注意:每个节点默认都起到了Coordinating node的职责。一般在开发环境中一个节点可以承担多个角色,但是在生产环境中,还是设置单一的角色比较好,因为有助于提高性能。
           

5、分片(shard)

了解分布式或者学过mysql分库分表的应该对分片的概念比较熟悉,ES里面的索引可能存储大量数据,这些数据可能会超出单个节点的硬件限制。

为了解决这个问题,ES提供了将索引细分为多个碎片的功能,这就是分片。这里咱们可以简单去理解,在创建索引时,只需要咱们定义所需的碎片数量就可以了,其实每个分片都可以看作是一个完全功能性和独立的索引,可以托管在集群中的任何节点上。

疑问二:分片有什么好处和注意事项呢?

通过分片技术,咱们可以水平拆分数据量,同时它还支持跨碎片(可能在多个节点上)分布和并行操作,从而提高性能/吞吐量;
    ES可以完全自动管理分片的分配和文档的聚合来完成搜索请求,并且对用户完全透明;
    主分片数在索引创建时指定,后续只能通过Reindex修改,但是较麻烦,一般不进行修改。
           

6、副本分片(replica shard)

熟悉分布式的朋友应该对副本对概念不陌生,为了实现高可用、遇到问题时实现分片的故障转移机制,ElasticSearch允许将索引分片的一个或多个复制成所谓的副本分片。

疑问三:副本分片有什么作用和注意事项呢?

当分片或者节点发生故障时提供高可用性。因此,需要注意的是,副本分片永远不会分配到复制它的原始或主分片所在的节点上;

    可以提高扩展搜索量和吞吐量,因为ES允许在所有副本上并行执行搜索;

    默认情况下,ES中的每个索引都分配5个主分片,并为每个主分片分配1个副本分片。主分片在创建索引时指定,不能修改,副本分片可以修改。
           

四、核心功能

(一)、EElasticSearch核心之——Mapping设置

  • https://www.jianshu.com/p/c994e8fc86d8

(二)、elasticsearch实战之xpack安装、head加密与xpack使用

  • xpack介绍和使用

五、拓展

1、elasticsearch 安装 ik 分词器

下载地址:https://download.csdn.net/download/qq_45463633/83799109

解压,上传到 /elasticsearch-7.8.1/plugins 目录下

Elasticsearch7.x学习总结一、官网和下载二、入门三、基本概念四、核心功能五、拓展五、碰到的问题六、ES性能优化七、常用属性和用法

2、elasticsearch 安装 kibana

  • 最新版下载地址:https://www.elastic.co/cn/downloads/kibana
  • 历史版本下载地址:https://download.csdn.net/download/qq_45463633/83805810
  • 官方文档地址:https://www.elastic.co/guide/en/kibana/7.5/index.html
  • 源码地址:https://github.com/elastic/kibana/tree/v7.5.2

注意 :kibana 版本要低于 elasticsearch 版本

2.1 es服务器需配置:

cluster.name: my-application
node.name: node-1
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["127.0.0.1"]
cluster.initial_master_nodes: ["node-1"]
http.cors.enabled: true   #开启跨域
http.cors.allow-origin: "*"  #全部放开
           

2.2 连接远程es服务器, kibana 需配置:(es服务器安装在本机则无需配置)

(1)、进入kinbna的conf下的kibna.yml目录下,基本配置如下

server.port: 5601				# 端口号
server.host: "0.0.0.0"		# kibana 安装服务器 IP ,0.0.0.0表示所以ip都可以访问
elasticsearch.hosts: ["http://172.16.17.88:9200"]	# http://172.16.17.88:920 是安装 ES 的服务器
i18n.locale: "zh-CN"			# 开启中文,默认英文

           

(2)、如果开启xpack,请进行安全认证配置

#elasticsearch开启的安全认证,导致kibana必须配置账号密码才能连接elasticsearch。
elasticsearch.username: "elastic"
elasticsearch.password: "123456"
#ES7.X 设置 xpack
xpack.security.enabled: true
xpack.reporting.encryptionKey: "a_random_string"
           
  • elasticsearch-7.x使用xpack进行安全认证

3、安装可视化界面 elasticsearch-head

使用前提:需要安装nodejs

nodeJS 安装教程:https://blog.csdn.net/qq_41787812/article/details/126140289

3.1 下载地址

项目 说明
开源/闭源 开源
源码管理地址 https://github.com/mobz/elasticsearch-head
License类别 Apache License 2.0
当前稳定版本 5.0.0(2018/4/10)
开发语言 Javascript
下载地址:github release https://github.com/mobz/elasticsearch-head/releases

3.2 安装

解压即可(尽量将ElasticSearch相关工具放在统一目录下)

3.3 启动

cd elasticsearch-head
# 安装依赖
npm install
# 启动
npm run start
# 访问
http://localhost:9100/
           

安装依赖

Elasticsearch7.x学习总结一、官网和下载二、入门三、基本概念四、核心功能五、拓展五、碰到的问题六、ES性能优化七、常用属性和用法

运行

Elasticsearch7.x学习总结一、官网和下载二、入门三、基本概念四、核心功能五、拓展五、碰到的问题六、ES性能优化七、常用属性和用法

访问

存在跨域问题(只有当两个页面同源,才能交互)

同源(端口,主机,协议三者都相同)

跨越相关参考: https://blog.csdn.net/qq_38128179/article/details/84956552

Elasticsearch7.x学习总结一、官网和下载二、入门三、基本概念四、核心功能五、拓展五、碰到的问题六、ES性能优化七、常用属性和用法

开启跨域(在elasticsearch解压目录config下elasticsearch.yml中添加)

# 开启跨域
http.cors.enabled: true
# 所有人访问
http.cors.allow-origin: "*"
           
重启elasticsearch

4、 logstash安装和详解

  • logstash安装
  • Logstash详解

五、碰到的问题

1、es使用内置IK分词器

2、elasticsearch安装ik分词器后启动报错

Elasticsearch7.x学习总结一、官网和下载二、入门三、基本概念四、核心功能五、拓展五、碰到的问题六、ES性能优化七、常用属性和用法

3、安装启动 elasticsearch 常见问题以及解决办法

# 问题 1
max number of threads [2047] for user [wlsadmin] is too low, increase to at least [4096] 
# 解决
vim /etc/security/limits.d/20-nproc.conf 
 * soft nproc 2047  修改为  * soft nproc 4096

# 问题 2
max virtual memory areas vm.max_map_count [65535] is too low, increase to at least [262144]
# 解决
vim /etc/sysctl.conf 
新增  vm.max_map_count=262144

           

六、ES性能优化

  • ES性能优化之查询优化笔记(一)
  • ES性能优化之写入优化笔记(一)
  • ES性能优化之内存优化
  • 优化从索引片段,内存设置,副本,分片,日志等方面入手

七、常用属性和用法

I、一些常用属性

1、elasticsearch中store设置true和false的区别

参考

设置索引的时候,我们给某些字段的store属性设置为true,在查询时,请求中可以携带stored_fields参数,指定某些字段,最后,这些字段会被包含在返回的结果中。如果请求中携带的字段没有被储存,将会被忽略。

2、elasticsearch之字段field参数

elasticsearch之字段field参数

3、Elasticsearch:fielddata 介绍

参考

对字段类型为text的字段,加入"fielddata"=true,就可以对这个项进行统计了。

II、ES一些用法

  • elasticsearchRestTemplate search 精准查询和模糊查询即不区分大小写
  • setTrackTotalHits 设置显示查询总数
Elasticsearch7.x学习总结一、官网和下载二、入门三、基本概念四、核心功能五、拓展五、碰到的问题六、ES性能优化七、常用属性和用法

笔记

  • 尚硅谷es笔记
  • 狂神es笔记
  • es笔记超详细
  • springboot整合elasticsearch(1)
  • springboot整合elasticsearch(2)
  • 批量导入数据(Postman与Kibana)

继续阅读