学习和使用“Elasticsearch “自我总结和在实际操作中遇到的问题及其解决方法
Elasticsearch 的一些官方解释和一些名词性质的东西就不在讲解了:注意的一点就是在面试中常问的几点,倒排索引、ES7之前 和 ES7之后的区别、幂等性、RESTful 、为何选择ES而不是其它的搜索引擎、和mysql数据库做对比。这些百度即可此处不做说明!一、ES、kibana的安装1.1采用最简单的Docker安装# ES7的docker文件version: "3.1"services
Elasticsearch 的一些官方解释和一些名词性质的东西就不在讲解了:注意的一点就是在面试中常问的几点,倒排索引、ES7之前 和 ES7之后的区别、幂等性、RESTful 、为何选择ES而不是其它的搜索引擎、和mysql数据库做对比。这些百度即可此处不做说明!
一、ES、kibana的安装
1.1采用最简单的Docker安装
# ES7的docker文件
version: "3.1"
services:
elasticsearch:
image: daocloud.io/library/elasticsearch:7.6.2
restart: always
container_name: elasticsearch
environment:
- "cluster.name=elasticsearch" #设置集群名称为elasticsearch
- "discovery.type=single-node" #以单一节点模式启动
- "ES_JAVA_OPTS=-Xms512m -Xmx512m" #设置使用jvm内存大
ports:
- 9200:9200
kibana:
image: daocloud.io/library/kibana:7.6.2
restart: always
container_name: kibana
ports:
- 5601:5601
environment:
- elasticsearch_url=http://39.105.25.114:9200
depends_on:
- elasticsearch
# ES6的docker文件
version: '2'
services:
elasticsearch:
container_name: elasticsearch
image: daocloud.io/library/elasticsearch:6.5.4
ports:
- "9200:9200"
environment:
- "ES_JAVA_OPTS=-Xms64m -Xmx128m"
- "discovery.type=single-node"
- "COMPOSE_PROJECT_NAME=elasticsearch-server"
restart: always
kibana:
container_name: kibana
image: daocloud.io/library/kibana:6.5.4
ports:
- "5601:5601"
restart: always
environment:
- ELASTICSEARCH_HOSTS=39.105.25.114:9200
启动命令是:docker-compose up -d
注意:
1.如果你买的是阿里的2核2G的服务器,把其它安装的应用全部停掉,否者会导致ES一直重启,服务器内存不够导致;开放对应的端口号;
2.自学使用可以去安装VM使用,百度有一堆的教程。
3.ES安装成功网站访问 http://192.168.95.128:9200
表示安装ES成功。
4.kibana安装成功后访问:http://192.168.95.128:5601/
点击次处进入。
5.在内存不足的时候(临时的分配内存)输入命令
#内存不足的时候(临时的分配内存)
sysctl -w vm.max_map_count=262144
6.所有的IP地址换成你自己的
二、安装ik分词器
2.1下载IK分词器
进去到ES容器内部,跳转到bin目录下,执行bin目录下的脚本文件:
#查看应用
docker ps
#进入应用内部
docker exec -it XXX bash
#进入目录
cd bin
-
进去到ES容器内部,跳转到bin目录下,执行bin目录下的脚本文件:
-
可能会出现下载失败,多式几次即可,
-
ES6的安装: ./elasticsearch-plugin install http://tomcat01.qfjava.cn:81/elasticsearch-analysis-ik-6.5.4.zip
-
ES7的安装: ./elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.2/elasticsearch-analysis-ik-7.6.2.zip
-
[root@618f16566ef6 bin]# ./elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.2/elasticsearch-analysis-ik-7.6.2.zip
-> Installing https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.2/elasticsearch-analysis-ik-7.6.2.zip
-> Downloading https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.2/elasticsearch-analysis-ik-7.6.2.zip
[=================================================] 100%??
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: plugin requires additional permissions @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* java.net.SocketPermission * connect,resolve
See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
for descriptions of what these permissions allow and the associated risks.Continue with installation? [y/N]y
-> Installed analysis-ik
[root@618f16566ef6 bin]# -
重启ES的容器,让IK分词器生效。
#重启应用 docker restart xxx
我使用的是ES7,之后的增删改查都在这里面操作
三、ES的基本操作
3.1 ES的结构
3.1.1 索引Index,分片和备份
ES的服务中,可以创建多个索引。
每一个索引默认被分成5片存储。
每一个分片都会存在至少一个备份分片。
备份分片默认不会帮助检索数据,当ES检索压力特别大的时候,备份分片才会帮助检索数据。
备份的分片必须放在不同的服务器中。
3.1.2类型Type
类型是文档逻辑容器,在ES 7.0 以及之后的版本中 Type 被废弃了。
一个 index 中只有一个默认的 type,即 _doc;
3.1.3属性Field
一个文档中,可以包含多个属性。类似于MySQL表中的一行数据存在多个列
3.2 ES 索引的操作index(相当于MySQL的数据库)
3.2.1创建一个索引
语法如下
number_of_shards 指定分片数 5
number_of_replicas 备份数 1
#创建一个索引
PUT /user
{
"settings": {
"number_of_replicas": 1,
"number_of_shards": 5
}
}
3.2.2查看索引
GET /user
3.2.3删除索引
DELETE /user
注意:该操作是在Kibana中操作的 你也可以在Postman中去操作,直接发送对应的请求即可,百度上有好多的对应操作;
3.3 ES中Field可以指定的类型
字符串类型:
text:一把被用于全文检索。 将当前Field进行分词。
keyword:当前Field不会被分词。
数值类型:
long:取值范围为-9223372036854774808~922337203685477480(-2的63次方到2的63次方-1),占用8个字节
integer:取值范围为-2147483648~2147483647(-2的31次方到2的31次方-1),占用4个字节
short:取值范围为-32768~32767(-2的15次方到2的15次方-1),占用2个字节
byte:取值范围为-128~127(-2的7次方到2的7次方-1),占用1个字节
double:1.797693e+308~ 4.9000000e-324 (e+308表示是乘以10的308次方,e-324表示乘以10的负324次方)占用8个字节
float:3.402823e+38 ~ 1.401298e-45(e+38表示是乘以10的38次方,e-45表示乘以10的负45次方),占用4个字节
half_float:精度比float小一半。
scaled_float:根据一个long和scaled来表达一个浮点型,long-345,scaled-100 -> 3.45
时间类型:
date类型,针对时间类型指定具体的格式
布尔类型:
boolean类型,表达true和false
二进制类型:
binary类型暂时支持Base64 encode string
范围类型:
long_range:赋值时,无需指定具体的内容,只需要存储一个范围即可,指定gt,lt,gte,lte
integer_range:同上
double_range:同上
float_range:同上
date_range:同上
ip_range:同上
经纬度类型:
geo_point:用来存储经纬度的
ip类型:
ip:可以存储IPV4或者IPV6
3.4创建索引并指定数据结构
#创建索引指定数据结构
PUT /book
{
"settings": {
# 备份数
"number_of_replicas": 1,
# 分片数
"number_of_shards": 5
},
# 指定数据结构
"mappings": {
# 文档存储的Field
"properties": {
# Field属性名
"name": {
#类型
"type": "text",
#指定分词器
"analyzer": "ik_max_word",
#指定当前Field可以被作为查询的条件
"index": true,
#是否需要额外存储
"store": false
},
"author": {
"type": "keyword"
},
"count": {
"type": "long"
},
"on-sale": {
"type": "date",
#时间类型的格式化方式
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
},
"descr": {
"type": "text",
"analyzer": "ik_max_word"
}
}
}
}
注意:1.这是ES7之后的方式,ES7之前需要加上下面指定类型
"mappings": {
# 类型 Type
"novel": {
# 文档存储的Field
"properties": {
2. 在Kibana中查看添加的数据的方式:
第一步:
第二步:
第三步:
第四步:
3.使用时把里面的注释删掉 我在里面做的是解释;
3.5文档的操作
_index、_id、_type锁定一个文档
3.5.1新建文档
自动生成id
POST /book/_doc
{
"name":"西游记",
"author":"吴承恩",
"count":10000,
"on-sale":"2022-01-16",
"descr":"看俺老孙一棒"
}
手动指定id
# 添加文档,手动指定id
PUT /book/_doc/1
{
"name": "红楼梦",
"author": "曹雪芹",
"count": 10000000,
"on-sale": "1985-01-01",
"descr": "一个是阆苑仙葩,一个是美玉无瑕"
}
3.5.2修改文档
覆盖式的修改
# 添加文档,手动指定id
PUT /book/_doc/1
{
"name": "红楼梦",
"author": "曹雪芹",
"count": 4353453,
"on-sale": "1985-01-01",
"descr": "一个是阆苑仙葩,一个是美玉无瑕"
}
doc的修改方式
POST /book/_doc/1/_update
{
"doc": {
"count":111111
}
}
3.5.3删除文档
#根据id删除
DELETE /book/_doc/1
下面链接的是JAVA中的整合
====================本文未完成之后会跟新在Java中的操作===================
更多推荐
所有评论(0)