二、 Docker安装
1、下载镜像文件
docker pull elasticsearch:7.4.2存储和检索数据
docker pull kiana:7.4.2可视化检索数据
2、创建实例
1、 Elasticsearch
mkdir-p /mydata/elasticsearch/config
mkdir-p/mydata/elasticsearch/data
Echo "http.host0.0.0.0">>/mydata/elasticsearch/config/elasticsearch.yml
docker run-name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m" \
-v /mydata/elasticsearch/config/elasticsearch.yml:usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.4.2
以后再外面装好插件重启即可;
特别注意
-e ES_JAVA_ OPTS="-Xms256m Xmx256m"\ 测试环境下,设置ES的初始内存和最大内存,否则导致过大启动不了ES
docker update --restart=always xxx docker中容器开机自启动
2、Kibanal
Docker run -name kibana -e ELASTICSEARCH_HOSTS=http://192.168.56.10:9200 -p 5601:5601 \
-d kibana:7.4.2
http:/192.168.56.10:9200一定改为自己虚拟机的地址
三、初步检索
1、_cat
GET /_cat/nodes:查看所有节点
GET /_cat/health:查看es健康状况
GET /_cat/master:查看主节点
GET /_cat/indices:查看所有索引 show databases;
2、素引一个文档(保存)
保存一个数据,保存在哪个索引的哪个类型下,指定用哪个唯一标识
PUT customer/ external/1 ;在 customer索引下的 external类型下保存1号数据为
PUT customer/external/1 { name": "John Doe } |
PUT和POST都可以, POST新增。如果不指定id,会自动生成id。指定id就会修改这个数据,并新增版本号
PUT可以新增可以修改。PUT必须指定id;由于PUT需要指定id,我们一般都用来做修改 操作,不指定id会报错。 |
- 査询文档
GET customer/external/1 结果: { " index":" customer'",/在哪个素引 "type":" external",/在哪个类型 "id":"1",//记录id "version": 2,//版本号 "_seq_no":1,//并发控制字段,每次更新就会+1,用来做乐观锁 "primary_term":1,//同上,主分片重新分配,如重启,就会变化 "found": true "_source":{ //真正的内容 "name":"John Doe" } |
更新携带?if_seq_no=0&if_ primary_term=1 |
- 更新文档
POST customer/external/1/_update { "doc":{ "name": "John Doew } } 或者 POST customer/external/1 { "name":"John Doe2" } 或者 PUT customer/external/1 { "name":"John Doe" }
|
不同:POST 带_update操作会对比源文档数据,如果相同不会有什么操作,文档 version不增加 POST 不带_update总会将数据重新保存并增加 version版本 PUT操作总会将数据重新保存并增加 version版本; 带_update对比元数据如果一样就不进行任何操作 看场景; 对于大并发更新,不带 update 对于大并发査询偶尔更新,带 update;对比更新,重新计算分配规则。
|
|
POST customer/external/1/update { "doc":{"name": "Jane Doe","age":20} } PUT和POST不带_update直接更新 |
5、删除文档&索引
DELETE customer/external/1 |
DELETE customer |
6、批量API
POST customer/external/_bulk {"index":{"_id":"1"}} {"name":"John Doe"} {"index":{"_id":"2"}} {"name":"Jane Doe"} |
语法格式 {action: {metadata}}\n {request body }\n
{action: {metadata}}\n {request body }\n |
复杂实例 POST /_bulk {"delete":{"_index": "website","_type": "blog", "_id":"123"}} {"create": {"_index": "website", "_type": "blog", "_id": 123"}} {"title": "My first blog post"} {"index": ("_index": "website", "_type": "blog"}} {"title":"My second blog post"} {"update": {"_index": "website,"_type": "blog", "_id": "123", "retry on conflict": 3) {"doc":{ "title":"My updated blog post"}} |
- // retry on conflict重试次数es5内容
bulk API以此按顺序执行所有的 action(动作)。如果一个单个的动作因任何原因而失败,
它将继绩处理它后面剩余的动作。当 bulk API返回时,它将提供毎个动作的状态(与发送
的顺序相同),所以您可以检査是否一个指定的动作是不是失败了。
7、样本测试数据
我准备了一份顾客银行账户信息的虚构的JSoN文档样本。每个文档都有下列的 schema
(模式):
{
|
https://raw.githubusercontent.com/elastic/elasticsearch/master/docs/src/test/resources/accounts.json
=true导入测试数据
POST bank/account/_bulk
测试数据