0%

docker es

环境

安装 docker 就不多说了

Elasticsearch 以及 ik, kibana 版本一定要一致,此次使用的版本是7.9.0

Elasticsearch

1
2
docker pull elasticsearch:7.9.0
docker run --network=dnetwork -d -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e "discovery.type=single-node" --name es elasticsearch:7.9.0

安装成功后,可以看到

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
root@ubuntu:~# curl  localhost:9200
{
"name" : "8b9d30ea5a68",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "htfsXjtCTpiLnJhakFKhOw",
"version" : {
"number" : "7.9.0",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "a479a2a7fce0389512d6a9361301708b92dff667",
"build_date" : "2020-08-11T21:36:48.204330Z",
"build_snapshot" : false,
"lucene_version" : "8.6.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}

kibana

kibana 是一个简单的 ES 可视化管理工具。

1
2
docker pull kibana:7.9.0
docker run --network=dnetwork --name kibana --link=elasticsearch:8b9d30ea5a68 -p 5601:5601 -d kibana:7.9.0

安装成功后访问浏览器 localhost:5601 可以看到界面。

ES简单使用

简单概念

ElasticSearch的索引即index,可以理解为MySQL的 Table (6.x之前可以理解为database, 6.x之后可理解为table)。因为之前在 index 和文档之间有一层 type(类型),且可以创建多个mapping,而7.0没有了,一个 index 也只能有一个 mapping。

索引

索引名必须全小写。
创建文档时,也会自动生成索引。

新增索引

PUT: /{index_name}

path parameters:
  • index_name:
    • 全小写
    • 不能包含, /, *, ?, “, <, >, |, (空白符), ,, #
    • 7.0 之前可能包含’:’,但是7.0+不支持
    • 不能以 -, _, + 开头
    • 不能为. 或者 ..
    • 不能超过255 byte,一个汉字2个byte
    • 名字不能以 . 开头,因为默认 . 开头的会被隐藏,通常只用于系统插件。
      query parameters:
  • wait_for_active_shards(可选,字符串):任意正整数(1 到 number_of_replicas+1)或者all,默认1.等待碎片副本数达到后,执行后续操作。
  • master_timeout(可选,时间单位(d,h,m,s,ms,micros,nanos)):指定连接master node 的超时时间,默认30s。
  • timeout(可选,时间单位(d,h,m,s,ms,micros,nanos)): 指定响应超时时间,默认30s。
request body:
  • aliases(可选): index 别名,
  • mappings(可选): (mapping 对象)如果指定了,可以包含三个属性:
    • Field names
    • Field data types
    • Mapping parameters
  • settings(可选): 配置index
    举个例子:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    PUT /my-index-000001
    {
    "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 2,
    "index.write.wait_for_active_shards": "2"
    },
    "mappings": {
    "properties": {
    "field1": { "type": "text" }
    }
    },
    "aliases": {
    "alias_1": {},
    "alias_2": {
    "filter": {
    "term": { "user.id": "kimchy" }
    },
    "routing": "shard-1"
    }
    }
    }

    删除索引

    DELETE /{index_name}
    path parameters:
  • index_name
    • 可以逗号分割
    • 可以使用 wildcard 匹配
    • 不能使用 alias。
    • _all 或者 * 可以删除所有索引。如果要禁止此行为,需要设置 action.destructive_requires_name 为 true。
      在 elasticsearch.yml 中修改或者使用 cluster update settings API
      query parameters:
  • allow_no_indices: 当通配符表达式或者_all, 仅能匹配到关闭的索引时。抛出异常。默认true。
  • expand_wildcards:all/open/closed/hidden/none, 默认open
  • ignore_unavailable: 默认true, missing 或者 close 的索引不会在响应中。
  • master_timeout(可选,时间单位(d,h,m,s,ms,micros,nanos)):指定连接master node 的超时时间,默认30s。
  • timeout(可选,时间单位(d,h,m,s,ms,micros,nanos)): 指定响应超时时间,默认30s。
    查询索引
    GET: /_cat/indices/?v 可以查看 ES 所有索引,以及他的相关信息,比如占用空间等等。
    查看单个索引详细信息
    GET: /{index_name}
    path parameters:
  • index_name
    • 可以逗号分割
    • 可以使用 wildcard 匹配
    • _all 或者 * 可以删除所有索引。
query parameters:
  • allow_no_indices
    当通配符表达式或者_all, 仅能匹配到关闭的索引时。抛出异常。默认true
  • expand_wildcards:all/open/closed/hidden/none, 默认open
  • flat_settings: 如果为 true, 以 flat foramt 返回所有 settings。默认为false。
  • include_defaults: 是否包括默认 settings。默认false
  • include_type_name: 7.0之后移除,为 true 。一个 mapping 类型则指定一个mapping body。默认false。
  • ignore_unavailable: 默认true, missing 或者 close 的索引不会在响应中。
  • local: 如果true, 只会接口本地节点的信息。默认false,也就是从 master 节点接收信息。
  • master_timeout(可选,时间单位(d,h,m,s,ms,micros,nanos)):指定连接master node 的超时时间,默认30s。

Documents 文档:

documents 其实也类似 sql 中的一条数据。index则有点像表,是数据的集合。

新增数据(index)

新增数据有如下接口:

1
2
3
4
5
6
7
PUT /<target>/_doc/<_id>

POST /<target>/_doc/

PUT /<target>/_create/<_id>

POST /<target>/_create/<_id>

新增时请使用 POST /<target>/_create/<_id>,不要使用PUT /<target>/_doc/<_id>。经过测试已存在的记录的时,前者不会新增,且会响应出错,后者会使其版本号+1。

Path parameters
  • target: 必填,目标数据流或者索引名字。
  • _id: 非必填,文档ID,以下接口下必填
    1
    2
    3
    PUT /<target>/_doc/<_id>
    PUT /<target>/_create/<_id>
    POST /<target>/_create/<_id>
    若要自动生成文档ID,使用接口/<target>/_doc/。并忽略此参数

    Request body

    请求体,也就是文档 _source。 json格式。