# 最新版本7,8.0 docker pull elasticsearch:7.8.0
# 基本启动命令 # -e "discovery.type=single-node" \ 单节点集群 # -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \ 制定运行参数,否则若是机器内存过小,启动后会很是卡顿 # --name 起个别名 docker run -p 9200:9200 -p 9300:9300 --name es7.8 \ -e "discovery.type=single-node" \ -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \ -d elasticsearch:7.8.0 # 查看集群健康状态 GET /_cat/health?v # 查看节点健康状态 GET /_cat/nodes?v # 查看索引信息 GET /_cat/indices?v
# 进入容器中 docker exec -it es7.8 /bin/bash # 查看文件夹及权限 [root@87e29ba6ef1e elasticsearch]# ll total 588 -rw-r--r-- 1 elasticsearch root 13675 Jun 14 19:34 LICENSE.txt -rw-r--r-- 1 elasticsearch root 544318 Jun 14 19:37 NOTICE.txt -rw-r--r-- 1 elasticsearch root 8165 Jun 14 19:34 README.asciidoc drwxr-xr-x 2 elasticsearch root 4096 Jun 14 19:39 bin drwxrwxr-x 1 elasticsearch root 4096 Jul 9 04:31 config #775权限 drwxrwxr-x 3 root root 4096 Jul 9 04:29 data #775权限 drwxr-xr-x 1 elasticsearch root 4096 Jun 14 19:38 jdk drwxr-xr-x 3 elasticsearch root 4096 Jun 14 19:38 lib drwxrwxr-x 1 elasticsearch root 4096 Jul 9 04:31 logs #775权限 drwxr-xr-x 47 elasticsearch root 4096 Jun 14 19:39 modules drwxr-xr-x 2 root root 4096 Jul 9 04:17 plugins #775权限
docker run -p 9200:9200 -p 9300:9300 --name es7.8 \ -e "discovery.type=single-node" \ -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \ -v /dockerfile/elasticsearch/plugins:/usr/share/elasticsearch/plugins \ -v /dockerfile/elasticsearch/data:/usr/share/elasticsearch/data \ -v /dockerfile/elasticsearch/logs:/usr/share/elasticsearch/logs \ -d elasticsearch:7.8.0 # 作映射以前赋予文件夹相应权限,默认建立的文件夹权限就是755,所 吃 以/dockerfile/elasticsearch/plugins不用改权限 chmod -R 775 /dockerfile/elasticsearch/data chmod -R 775 /dockerfile/elasticsearch/logs # data和logs文件夹刚开始是空的,数据是启动时本身加进去的,因此能够作映射, # plugins文件夹刚开始是没有安装插件的,也是空的,因此也能够作映射 # config文件夹是配置文件,不能用空目录作映射,不然启动直接退出,除非本身建立的文件夹中有相关配置文件 # 能够先进入容器,讲config文件夹拷贝出来,获得一份配置文件 -v /dockerfile/elasticsearch/config:/usr/share/elasticsearch/config \
# 官方提供的account.json数据,包含1000条数据 wget https://raw.githubusercontent.com/elastic/elasticsearch/master/docs/src/test/resources/accounts.json# # 每一个Document内容 { "account_number": 0, "balance": 16623, "firstname": "Bradshaw", "lastname": "Mckenzie", "age": 29, "gender": "F", "address": "244 Columbus Place", "employer": "Euron", "email": "bradshawmckenzie@euron.com", "city": "Hobucken", "state": "CO" } # 使用如下 _ bulk 批量操做请求将帐户数据存储到到bank索引中: curl -H "Content-Type: application/json" -XPOST "localhost:9200/bank/_bulk?pretty&refresh" --data-binary "@accounts.json" # 查看索引状态 curl "localhost:9200/_cat/indices?v"
# 拉取镜像 # kibana版本必须和elasticsearch版本保持一致 docker pull kibana:7.8.0 # 启动容器 # YOUR_ELASTICSEARCH_CONTAINER_NAME_OR_ID 正在运行的ES容器ID或name docker run --link YOUR_ELASTICSEARCH_CONTAINER_NAME_OR_ID:elasticsearch -p 5601:5601 {docker-repo}:{version} docker run --link es7.8:elasticsearch -p 5601:5601 -d kibana:7.8.0
# Ik分词器版本要和ES和Kibana版本保持一致 # 进入容器 docker exec -it elasticsearch /bin/bash #此命令须要在容器中运行 elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.8.0/elasticsearch-analysis-ik-7.8.0.zip # 退出容器,重启容器 docker restart elasticsearch
# 建立一个index,名为twitter PUT /twitter # 查看索引状态 GET /_cat/indices?v
在建立索引时,能够指定如下内容:node
建立的每一个索引均可以有特定的相关设置,在主体中定义:git
PUT /twitter { "settings" : { "index" : { "number_of_shards" : 3, "number_of_replicas" : 2 } } } # _ shards 的默认值是1 # _ replica 的默认值是1(即每一个主碎片有一个副本) #或者更简单,没必要在设置部分中显式指定索引部分 PUT /twitter { "settings" : { "number_of_shards" : 3, "number_of_replicas" : 2 } }
建立索引 API 容许提供一个映射定义,映射定义用于包含类型名称github
PUT /test { "settings" : { "number_of_shards" : 1 }, "mappings" : { "properties" : { "field1" : { "type" : "text" } } } }
DELETE /twitter # 查看索引状态 GET /_cat/indices?v
GET /twitter
GET /bank/_mapping
# 查询索引bank中的所有文档 GET /bank/_search { "query": { "match_all": {} } }
# 检索银行索引中的全部文档,按account_number字段排序 asc 是升序,desc是降序 GET /bank/_search { "query": { "match_all": {} }, "sort": [ { "account_number": "asc" } ] } # 查找指定范围的文档 # 下面的请求会获得从第10条文档到第19条文档的结果: GET /bank/_search { "query": { "match_all": {} }, "sort": [ { "account_number": "asc" } ], "from": 10, # 起始位置 "size": 10 # 大小/数目 } # 默认状况下,响应的命中部分hits包含与搜索条件匹配的前10个文档: # took – 运行查询须要多长时间(毫秒) # timed_out – 搜寻请求是否超时 # _shards – 搜索了多少碎片,并分别列出成功、失败或跳过的碎片数量,建立索引时默认分片数是5 # max_score – 找到的全部文档中最相关文档(匹配程度最高)的分数 # hits.total.value - 找到多少相符的文档 # hits.sort - 文档的排序位置(按哪一个字段排序,不指定排序规则时按相关性得分排序) # hits._score - 文件的相关性得分(不适用于使用match_all) { "took" : 63, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "skipped" : 0, "failed" : 0 }, "hits" : { # 命中部分 "total" : { "value": 1000, # 查到的总数 "relation": "eq" }, "max_score" : null, "hits" : [ { "_index" : "bank", "_type" : "_doc", "_id" : "0", "sort": [0], "_score" : null, "_source" : {"account_number":0,"balance":16623,"firstname":"Bradshaw","lastname":"Mckenzie","age":29,"gender":"F","address":"244 Columbus Place","employer":"Euron","email":"bradshawmckenzie@euron.com","city":"Hobucken","state":"CO"} }, { "_index" : "bank", "_type" : "_doc", "_id" : "1", "sort": [1], "_score" : null, "_source" : {"account_number":1,"balance":39225,"firstname":"Amber","lastname":"Duke","age":32,"gender":"M","address":"880 Holmes Lane","employer":"Pyrami","email":"amberduke@pyrami.com","city":"Brogan","state":"IL"} }, ... ] } } # 搜索并返回指定字段内容,使用_source表示,例如只返回account_number和balance两个字段内容: GET /bank/_search { "query": { "match_all": {} }, "_source": ["account_number", "balance"] }
# 会查出字全部文档中,address字段包含 mill 【或者】 lane 的文档 GET /bank/_search { "query": { "match": { "address": "mill lane" } } } # 对于数值类型match操做使用的是精确匹配,对于文本类型使用的是模糊匹配;
# 只会查出字全部文档中,address字段包含 "mill lane" 的文档 GET /bank/_search { "query": { "match_phrase": { "address": "mill lane" } } }
# 在bank索引中搜索40岁客户(age=40)的帐户,但不包括住在爱达荷州的任何人,州名是ID (state=ID): GET /bank/_search { "query": { "bool": { "must": [ { "match": { "age": "40" } } ], "must_not": [ { "match": { "state": "ID" } } ] } } } # 还能够借助 must_not 显示地指定筛选条件 # 使用范围过滤器filter将结果限制为余额(balance字段)在 $20,000和 $30,000之间的账户。 # gte是大于等于,gt是大于;lte是小于等于,lt是小于 GET /bank/_search { "query": { "bool": { "must": { "match_all": {} }, "filter": { "range": { "balance": { "gte": 20000, "lte": 30000 } } } } } } # should表示知足其中任意一个,搜索address字段中包含mill或者lane的文档; GET /bank/_search { "query": { "bool": { "should": [ { "match": { "address": "mill" } }, { "match": { "address": "lane" } } ] } } }
term
查询, 能够用它处理数字(numbers)、布尔值(Booleans)、日期(dates)以及文本(text,不推荐)。docker
term
查询会查找咱们指定的精确值。做为其自己, term
查询是简单的。它接受一个字段名以及咱们但愿查找的数值:shell
{ "term" : { "price" : 20 } }
一般当查找一个精确值的时候,咱们不但愿对查询进行评分计算。只但愿对文档进行包括或排除的计算,因此咱们会使用 constant_score
查询以非评分模式来执行 term
查询并以一做为统一评分。json
最终组合的结果是一个 constant_score
查询,它包含一个 term
查询:bash
GET /bank/_search { "query": { "constant_score": { "filter": { "term": { "age": { "value": 20 } } } } } }
默认状况下,Elasticsearch 做为分析的一部分更改text类型字段的值。这可能使查找文本字段值的精确匹配变得困难。若要搜索文本字段值,请使用match查询。app
默认状况下,Elasticsearch 会在分析期间更改文本字段的值。例如,默认的标准分析器更改文本字段值以下:curl
# 建立一个名为my_index的索引,其中 full _ text 字段为文本类型。 PUT my_index { "mappings" : { "properties" : { "full_text" : { "type" : "text" } } } } # 在插入一个值为 Quick Brown Foxes! 的文档。 PUT my_index/_doc/1 { "full_text": "Quick Brown Foxes!" } # 由于full_text字段是一个文本字段,Elasticsearch 在分析期间将 Quick Brown Foxes! 更改成[ Quick,Brown,fox ]。 # 使用term搜索这条文档 GET my_index/_search?pretty { "query": { "term": { "full_text": "Quick Brown Foxes!" } } } # 由于full_text字段再也不包含确切的术语 Quick BrwnFoxes! ,术语查询搜索不返回任何结果。
# 指定索引customer,指定id,可选,若不指定则随机生成,_doc是默认参数,可不写 PUT /bank/_doc/1 { "email": "test@test.com" }
POST /< index >/_ update/< _ id >elasticsearch
<_id> 必需,字符串,文档更新的惟一标识符
DELETE /<index>/_doc/<_id> # 删除bank索引中id为1的文档 DELETE /bank/_doc/1