ElasticSearch
ES的底层是开源库Lucene,它对Lucene进行了封装提供了REST API的操作接口。
安装
- 官网下载并解压缩,然后去bin目录下各环境运行各环境的执行文件,即可跑去服务
- 测试服务是否正常启动:curl localhost:9200
概念
- Node : 一个单节点
- Cluster : 一个集群
- Index :ES数据管理的顶层单位
- Document : Index里面单条的记录称为Document,用JSON格式表示,最好保持相同的结构(scheme),有利于提高搜索效率
- Type :Document 可以分组,比如weather这个 Index 里面,可以按城市分组(北京和上海),也可以按气候分组(晴天和雨天)。这种分组就叫做 Type,它是虚拟的逻辑分组,用来过滤 Document。(6.x 版只允许每个 Index 包含一个 Type,7.x 版将会彻底移除 Type。)
创建和删除Index
创建
curl -X PUT localhost:9200/weather
返回
1 | { |
删除
curl -X DELETE localhost:9200/weather
返回
1 | {"acknowledged":true} |
中文分词设置
在Windows环境安装插件命令,Linux环境执行elasticsearch-plugin
elasticsearch-plugin.bat install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.3.2/elasticsearch-analysis-ik-6.3.2.zip
安装完会提示:-> Installed analysis-ik, 然后重启ES
测试
使用PostMan发送PUT请求,请求地址localhost:9200/accounts,请求body如下:
1 | { |
解析:首先新建一个名称为accounts的 Index,里面有一个名称为person的 Type。person有三个字段(user、title、desc)
上面的analyzer是字段文本的分词器,search_analyzer是搜索词的分词器。ik_max_word分词器是插件ik提供的,可以对文本进行最大数量的分词。
#健康检查
1 | "cluster_name" : "elasticsearch", 集群名称 |
#问题
1 | { |
原因:
这是由于ES新节点的数据目录data存储空间不足,导致从master主节点接收同步数据的时候失败,此时ES集群为了保护数据,会自动把索引分片index置为只读read-only
解决步骤:
1、提供足够的存储空间供数据写入,如需在配置文件中更改ES数据存储目录,注意重启ES
2、剩余磁盘空间达到es最小值,添加数据被block
PUT [xxx]_all/_settings {“index.blocks.read_only_allow_delete”: null}