ElasticSearch的快速安装和使用

发布于:2022-12-10 ⋅ 阅读:(518) ⋅ 点赞:(0)

1.简介

1)全文搜索属于最常见的需求,开源的 Elasticsearch 是目前全文搜索引擎的首选。

2)它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它

3)Elastic 的底层是开源库 Lucene,Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用。

官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html

2.基本概念

这里和mysql对比起来就很好理解了

1)Index(索引)相当于mysql的database

2)Type(类型) 相当于mysql的table

3)Document(文档) 相当于mysql中table的一行记录,文档是 JSON 格
式的

3.倒排索引

倒排索引(Inverted Index)也叫反向索引,有反向索引必有正向索引。通俗地来讲,正向索引是通过key找value,反向索引则是通过value找key。

 解释:将文档的内容进行分词,一些字符,停用词(或者没有实际含义的词)将会被过滤,将这些词和它们的文档编号结合在一起。

比如我们想要查询文档中包含Elastic(大小写一样的),那么会去单词表中查找到对应的Elastic,这样就会找出id为1,2,3的文档都包含Elastic,那么就去文档表中查询id为1,2,3的文档,这样就非常快了

如果我们使用正向索引,比如mysql来查询包含Elastic的文档(select * from table where 内容 like  ‘Elastic’),这样就会全表扫描,会很慢

4.Docker 安装 ElasticSearch

1)docker pull elasticsearch:7.4.2

2)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 -Xmx256m" \
-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

// ES_JAVA_OPTS="-Xms64m -Xmx256m 一定要加上这个,设置 ES 的初始内存和最大内存,否则导
致过大启动不了 ES

大家也可以安装一个可视化工具Kibana,相当于MySQL的SQLyog工具

docker pull kibana:7.4.2 //拉去镜像

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

5.入门使用

注意:一定要把概念和mysql对应起来,不然会很难受

下面测试可以用postman或Kibana操作

但到批量操作就只能使用Kibana操作

1)_cat

GET /_cat/nodes:查看所有节点
GET /_cat/health:查看 es 健康状况
GET /_cat/master:查看主节点
GET /_cat/indices:查看所有索引 相当于show databases;

2)保存一个文档

在 customer 索引下的 external 类型下保存 1 号数据为(在customer数据库中的external 保存一条id为1的数据,后面我就不解释了)
 

PUT customer/external/1
{ "name": "John Doe"
}

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

3)查询文档

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

4)更新文档

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;
对于大并发查询偶尔更新,带 

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

5)删除文档&索引

DELETE customer/external/1
DELETE customer

6)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"} }

//index是插入操作

更多进阶学习大家可以去官方文档上学习,比如数据分析和整合springboot

https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html

本文含有隐藏内容,请 开通VIP 后查看