架构师修炼之道

知识日新月异,唯有保持同步迭代,才能适应变化的未来!

0%

索引操作

  • 创建索引

    • 手动创建索引,可以在请求中加入所有设置和类型映射,例如:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      PUT /mytest3
      {
      "settings": {
      "number_of_shards": "3",
      "number_of_replicas": "1"
      },
      "mappings": {
      "properties": {
      "description": {
      "type": "text",
      "index": false
      }
      }
      }
      }
    • 如果在 config/elasticsearch.yml 中添加 action.auto_create_index: false 配置来防止自动创建索引。

  • 查看索引设置 GET /mytest3,可以指定响应对对象,例如 GET /mytest3/_settings

  • 检查索引是否存在 HEAD /mytest3

  • 打开索引 POST /mytest3/_open,关闭索引 POST /mytest3/_close。索引关闭后可以会在settings对象中增加 "verified_before_close": "true"

  • PUT mapping API

    • 允许你创建索引并设定Mapping,或者给存在的索引增加新的类型,或者在已有类型中增加新的字段。一般不能修改已有的字段。

    • 给存在的索引增加新的字段

      1
      2
      3
      4
      5
      6
      7
      8
      PUT /mytest3/_mapping
      {
      "properties": {
      "user_name": {
      "type": "text"
      }
      }
      }
    • 可以同时为多个索引设置mapping,通配符也同样是支持的。

    • 查询索引的mapping设置 GET /mytest3/_mapping,查询所有索引 GET /_all/_mapping,查看某个索引的字段 GET /mytest3/_mapping/field/user_name,description,也可以模糊匹配字段 GET /mytest3/_mapping/field/descrip*

      阅读全文 »

基本概念

随着ES版本的升级,文中有些概念可能已经废弃。

  • 索引词(term)
    • 一个能够被索引的精确值,区分大小写,可以通过term查询进行准确的搜索。
  • 文本(text)
    • 一段普通的非结构化文字,文本会被分析成一个个的索引词,存储在es的索引库中,这样才能进行搜索。
  • 分析(analysis)
    • 将文本转换为索引词的过程,分析的结果依赖于分词器。
    • 分析机制用于进行全文文本的分词,以建立供搜索用的反向索引。
  • 索引(index)
    • 索引类似于关系数据库中的数据库,每个索引有不同字段,可以对应不同的类型;
    • 每个索引都可以有一个或者多个主索引片,同时每个索引还可以有零个或者多个副本索引片。
  • 文档(document)
    • 文档类似于关系数据库中的表中的行记录,每个存储在索引中的一个文档都有一个原始的json文档,被存储在一个叫做_source的字段中。当搜索文档的时候默认返回的是这个字段。
    • 一个文档不只有数据,还包含了元数据(metadata)——关于文档的信息:
      1. _index:文档存储的地方。名字必须是全部小写,不能以下划线开头,不能包含逗号;
      2. _id:id仅仅是一个字符串,指一个文件的唯一标识 ,它与_index组合时就可以在ES中唯一标识一个文档。
      3. 创建新文档时,可以自定义id,也可以让ES自动生成id。自动生成的ID有22个字符长,URL-safe, Base64-encoded string universally unique identifiers, 或者叫UUIDs。
  • 映射(mapping)
    • 映射类似于关系数据库中的表结构,每一个索引都有一个映射,它定义了索引中的每一个字段类型,以及一个索引范围内的设置。一个映射可以事先被定义,或者在第一次存储文档的时候自动识别。
    • 映射(mapping)机制用于进行字段类型确认,将每个字段匹配为一种确定的数据类型(string, number, booleans, date等) 。
  • 字段(field)
    • 字段类似于关系数据库中表的列,每个字段都对应一个字段类型,例如整数、字符串、对象等,可以指定如何分析该字段的值。
    • 重要的是在ES里面:每个文档里的字段都默认会被索引并被查询。也就是说,每个字段专门有一个反向索引用于快速检索。而且与其它数据库不同,它可以在同一个查询中利用所有的这些反向索引,以惊人的速度返回结果。
  • 来源字段(sourcefield)
    • 默认情况下,原始文档将被存储在_source这个字段中,查询的时候也是返回这个字段。这样可以从搜索结果中访问原始的对象,这个对象返回一个精确的json字符串,这个对象不显示索引分析后的其他任何数据。
  • 集群(cluster)
    • 由一个或多个共享相同群集名称的节点组成的ES组,它们具有相同的cluster.name,它们协同工作,分享数据和负载。
    • ES是一个分布式的文档(document) 存储引擎,它可以实时存储并检索复杂数据结构,序列化的JSON文档。换言说,一旦文档被存储在ES中,它就可以在集群的任一节点上被检索。
      阅读全文 »

安装环境

1
2
3
4
Distributor ID:	Debian
Description: Debian GNU/Linux 11 (bullseye)
Release: 11
Codename: bullseye
  • 创建一个系统用户用来安装和运行elasticsearch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
tianmx@mydebian:[~]: sudo adduser elastic
正在添加用户"elastic"...
正在添加新组"elastic" (1002)...
正在添加新用户"elastic" (1002) 到组"elastic"...
创建主目录"/home/elastic"...
正在从"/etc/skel"复制文件...
新的 密码:
重新输入新的 密码:
passwd:已成功更新密码
正在改变 elastic 的用户信息
请输入新值,或直接敲回车键以使用默认值
全名 []: elastic
房间号码 []:
工作电话 []:
家庭电话 []:
其它 []:
这些信息是否正确? [Y/n] y
  • 切换到上面创建的elastic用户
1
2
3
4
5
tianmx@mydebian:[~]: su - elastic
密码:
elastic@mydebian:~$ pwd
/home/elastic
elastic@mydebian:~$
阅读全文 »

安装

手动下载

  • 在官方发布页面下载安装包 elasticsearch-analysis-ik-[版本].zip,其版本与你安装的ES要相同。
  • 执行命令 ~/elasticsearch-8.3.3/plugins/analysis-ik 创建ik插件存储目录,将上面的文件解压后放到analysis-ik目录内:
1
2
3
4
5
6
7
8
9
10
11
12
tianmx@mydebian:[~/elasticsearch-8.3.3/plugins/analysis-ik]: ll
总用量 1.5M
drwxr-xr-x 3 tianmx tianmx 4.0K 8月 28 23:09 ./
drwxr-xr-x 5 tianmx tianmx 4.0K 8月 28 23:08 ../
-rw-r--r-- 1 tianmx tianmx 258K 9月 29 2020 commons-codec-1.9.jar
-rw-r--r-- 1 tianmx tianmx 61K 9月 13 2020 commons-logging-1.2.jar
drwxr-xr-x 2 tianmx tianmx 4.0K 8月 28 17:05 config/
-rw-r--r-- 1 tianmx tianmx 54K 8月 28 22:56 elasticsearch-analysis-ik-8.3.3.jar
-rw-r--r-- 1 tianmx tianmx 720K 9月 29 2020 httpclient-4.5.2.jar
-rw-r--r-- 1 tianmx tianmx 320K 9月 29 2020 httpcore-4.4.4.jar
-rw-r--r-- 1 tianmx tianmx 1.8K 8月 28 22:56 plugin-descriptor.properties
-rw-r--r-- 1 tianmx tianmx 125 8月 28 22:56 plugin-security.policy

远程安装

  • 使用 elasticsearch-plugin 安装(从 v5.5.1 版本开始支持)
  • 执行命令 ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/[版本]/elasticsearch-analysis-ik-[版本].zip 将自动下载并解压到插件目录。
  • 下载插件的地址需从IK官方Github发布页面上复制,注意版本号与你安装的ES一致。
    阅读全文 »

配置推荐

重要配置项说明

  1. zookeeper.connect:必配参数,建议在kafka集群的每台机器都配置所有zk。
  2. broker.id:必配参数。集群节点的标示符,不得重复,取值范围0~n。
  3. log.dirs:不要使用默认的“/tmp/kafka-logs”
  4. advertised.host.name(默认为“host.name”):注册到zk供用户使用的主机名,内网环境通常无需配置,而IaaS一般需要配置为公网地址。
  5. advertised.port:注册到zk供用户使用的服务端口,通常在IaaS环境需要额外配置。
  6. num.partitions(默认是1):创建topic时的默认partition数量
  7. default.replication.factor:自动创建topic的默认副本数量,官方建议修改为2。
  8. min.insync.replicasISR:提交生成者请求的最小副本数
  9. unclean.leader.election.enable(默认允许):是否允许不具备ISR资格的replicas被选举为leader,作为不得已的措施,甚至不惜牺牲部分数据。
  10. controlled.shutdown.enable:在kafka收到stop命令或者异常终止时,允许自动同步数据,建议开启。
    阅读全文 »