Elasticsearch的基本介绍与安装和基本增删改查

本文介绍了Elasticsearch的基本概念,包括Index、Type和Document,并详细讲解了其安装过程,包括下载镜像、创建实例以及配置。此外,还介绍了Elasticsearch的基本使用,如索引文档、查询、更新和删除操作,以及bulk批量API的运用。
摘要由CSDN通过智能技术生成

目前全文搜索属于最常见的需求,开源的 Elasticsearch 是目前全文搜索引擎的首选。它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它。

        Elastic 的底层是开源库 Lucene。但是,你没法直接用 Lucene,必须自己写代码去调用它的
接口。Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用。
REST API:天然的跨平台。
官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
官方中文:https://www.elastic.co/guide/cn/elasticsearch/guide/current/foreword_id.html
社区中文:
https://es.xiaoleilu.com/index.html
http://doc.codingdict.com/elasticsearch/0/

本文提供了一个测试数据,因为后续有进阶操作所以需要的同学可以下载下来

elasticsearch/docs/src/test/resources at 7.0 · elastic/elasticsearch · GitHub

一、基本概念

1、Index(索引)

动词,相当于 MySQL 中的 insert;
名词,相当于 MySQL 中的 Database

2、Type(类型)

在 Index(索引)中,可以定义一个或多个类型。
类似于 MySQL 中的 Table;每一种类型的数据放在一起;

3、Document(文档)

保存在某个索引(Index)下,某种类型(Type)的一个数据(Document),文档是 JSON 格
式的,Document 就像是 MySQL 中的某个 Table 里面的内容;

4、倒排索引机制

什么是倒排索引呢?先说一下他的反义词正向索引,程序需要扫描所有索引库中的文件,找出包含这个关键词的文件,在进行相关性的计算。这样是很复杂的所以我们都采用倒排索引比如:

 我们把:

1.红海行动

2.探索红海行动

3.红海特别行动

4.红海纪录片

5.特工红海特别探索

进行分词,比如红海和行动都在1号数据中,所以记录中分词后的红海有1,行动有1.二号数据分词为 探索 红海  行动  所以分词后记录中红海也在二号数据,行动也在二号数据所以记录也有2,探索在2号数据所以记录的第一个为2,以此类推这就是建立了一个倒排索引。

如果我们查询《红海特工行动》因为记录中红海行动都存在1号记录 红海和特工也都存在5号记录,所以系统会有一个相关性得分进行评估然后排序展示给我们。

安装Elasticsearch

1、下载镜像文件

因为都是在linux中的docker安装所以先下载镜像:

docker pull elasticsearch:7.4.2 存储和检索数据
docker pull kibana:7.4.2 可视化检索数据

2、创建实例

1、ElasticSearch

mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/data

配置任何主机都可以访问
echo "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml

chmod -R 777 /mydata/elasticsearch/ 保证权限

设置挂载和启动端口

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

配置好后去ip:9200访问一下,能看到内容则说明正常

然后 docker update elasticsearch --restart=always设置自启动

2、Kibana(图形化界面操作es)

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 一定改为自己虚拟机的地址

稍等一会再去访问,因为有可能启动慢然后发现进入操作界面了在设置自启动

docker update elasticsearch --restart=always

基本入门使用

       因为es的api都是基于rest规范的,内部储存的都是json格式数据。我们可以直接发送请求来获取响应。

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 号数据为

我们使用postman来调用:

PUT请求方式  ip:端口/customer/external/1

{

"name": "John Doe"
}

 因为我之前执行过一次所以result是updated状态,所以这个还可以做更新操作。seq_no(并发把版本控制字段)和primary_tem(主分配字段)是作用于乐观锁的。

其实PUT 和 POST 都可以,
POST 新增。如果不指定 id,会自动生成 id。指定 id 就会修改这个数据,并新增版本号
PUT 可以新增可以修改。PUT 必须指定 id;由于 PUT 需要指定 id,我们一般都用来做修改
操作,不指定 id 会报错。

如果使用乐观锁就请求加上 ?if_seq_no=0&if_primary_term=1

查询:

GET customer/external/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 操作会对比源文档数据,如果相同不会有什么操作,文档 version 不增加
PUT 操作总会将数据重新保存并增加 version 版本;
带_update 对比元数据如果一样就不进行任何操作。
看场景;
对于大并发更新,不带 update;
对于大并发查询偶尔更新,带 update;对比更新,重新计算分配规则。

更新同时增加属性:

POST customer/external/1/_update
{ "doc": { "name": "Jane Doe", "age": 20 }}
PUT 和 POST 不带_update 也可以

删除:

DELETE customer/external/1和DELETE customer ;es没有删除类型的支持,只能删除索引或者删除类型下所有内容。

bulk 批量 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"} }

bulk API 以此按顺序执行所有的 action(动作)。如果一个单个的动作因任何原因而失败,
它将继续处理它后面剩余的动作。当 bulk API 返回时,它将提供每个动作的状态(与发送
的顺序相同),所以您可以检查是否一个指定的动作是不是失败了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值