欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

ElasticSearch基础篇

时间:2023-06-25
ElasticSearch 一、简介

mysql作为数据持久化,ElasticSearch提供检索功能

基本概念

ESMySQLindex(索引)databasetype(类型)tabledocument(文档)record(记录)

在ES中,数据是以json格式存储的

ES模型

ES的工作原理

倒排索引

将要保存的数据data进行分词后保存到一个【分词-索引】表中,并且一直维护这个表。当需要检索特定数据时,就可以快速的根据这张表返回相应数据。

二、安装ES

使用docker容器安装

1、elasticsearch=>mysql kibana=》navicate

docker pull elasticsearch:7.4.2docker pull kibana:7.4.2版本要统一

2、配置挂载目录等等

# 将docker里的目录挂载到linux的/mydata目录中# 修改/mydata就可以改掉docker里的mkdir -p /mydata/elasticsearch/configmkdir -p /mydata/elasticsearch/data#查看系统当前内存使用情况free -m # es可以被远程任何机器访问echo "http.host: 0.0.0.0" >/mydata/elasticsearch/config/elasticsearch.yml#查询docker日志docker logs [容器id]# 递归更改es目录权限,否则访问失败chmod -R 777 /mydata/elasticsearch/#启动Elastic search# 9200是用户交互端口 9300是集群心跳端口# -e指定是单阶段运行# -e指定占用的内存大小,生产时可以设置32Gdocker run --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" -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

2、配置挂载目录等等

#查看当前虚拟机的ip地址ifconfig#启动kibana:sudo docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.56.10:9200 -p 5601:5601 -d kibana:7.4.2

查看Linuxip地址的方法

ifconfigip addrhostname -I

三、初步检索 1、检索es信息 2、新增文档

post/put 必须指定索引跟类型

put时:必须指定id,第一次状态为created 以后为updated

post时:如果指定id,与put作用相同;

如果不指定id,那么会自动生成随机id,并且状态永远都是created

发送的参数为json格式

3、查看文档&乐观锁

GET /索引名/类型名/文档id

乐观锁用法

增加if_seq_no=xxx&if_primary_term=xxx参数

当seq_no匹配的时候才会修改 否则不会修改

模拟这个操作

1、查看id=6的文档,得到seq_no和primary_trem

2、有两个请求查到了这条记录 并且想修改

假设1号修改先发出

由于seq_no已经改变 所有2号修改失败

{ "error": { "root_cause": [ { "type": "version_conflict_engine_exception", "reason": "[6]: version conflict, required seqNo [12], primary term [1]、current document has seqNo [13] and primary term [1]", "index_uuid": "PfpeoFkmRwms3i8hpOj5IQ", "shard": "0", "index": "customer" } ], "type": "version_conflict_engine_exception", "reason": "[6]: version conflict, required seqNo [12], primary term [1]、current document has seqNo [13] and primary term [1]", "index_uuid": "PfpeoFkmRwms3i8hpOj5IQ", "shard": "0", "index": "customer" }, "status": 409}

如果2号修改想要成功,必须重新获取seq_no

4、更新文档

前面创建的时候介绍了两种方法,还有另一种方法

POST /索引名/类型名/id/_update

{ "doc":{ "name":"111" }}

与之前两种方法的区别:会将当前数据和发来的参数进行对比,如果相同,那就什么都不做。

5、删除文档或者索引

不能删除类型

DELETE customer/external/1DELETE customer

删除文档后,查询:“found”:false

批量操作–bulk

POST /索引/分类/_bulk

两行为一个整体{"index":{"_id":"1"}}{"name":"a"}{"index":{"_id":"2"}}{"name":"b"}注意格式json和text均不可,要去kibana里Dev Tools {action:{metadata}}n{request body }n{action:{metadata}}n{request body }n

不同于数据库的事务,某一条执行失败是,其它该成功的也会成功

POST /_bulk

对整个索引执行操作,因为没有在url中指定索引和分类,所以需要在requestbody中指定,"_index"和"_type"等等

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"}}{"doc":{"title":"my updated blog post"}}

测试样本数据模板:

POST /bank/account/_bulk

https://gitee.com/xlh_blog/common_content/blob/master/es%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE.json

{"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"}

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。