ElasticSearch使用
官网:https://www.elastic.co/cn/elasticsearch/
安装
#选择macOS版本下载 解压
tar -zxvf elasticsearch-7.15.1-darwin-x86_64.tar.gz
#
cd elasticsearch-7.15.1/bin/
sh elasticsearch
# 报错:查看解压目录 发现jdk.app大小为0 重新解压
could not find java in bundled JDK at /Users/mpy/tools/elasticsearch-7.15.1/jdk.app/Contents/Home/bin/java
访问localhost:9200
后台运行es
nohup nice sh elasticsearch &
目录结构
bin : 启动文件
config : 配置文件
log4j2 : 日志配置文件
jvm.options : java虚拟机相关配置
elasticsearch.yml : elasticsearch配置文件,默认9200端口
lib : 相关jar包
modules : 功能模块
plugins : 插件
安装ES可视化界面
下载地址:https://github.com/mobz/elasticsearch-head
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
# npm速度慢 使用淘宝的镜像
sudo npm install -g cnpm --registry=https://registry.npm.taobao.org
# 查看cnpm命令是否生效
cnpm -v
cnpm install
npm run start
# 测试 访问 localhost:9100 发现存在跨域问题
# 修改 elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"
# 重启elasticsearch
安装Kibana
下载地址:https://www.elastic.co/cn/start
# 启动
cd kibana-7.15.1-darwin-x86_64/bin
sh kibana
# 访问测试
http://localhost:5601
找到dev-tools ,之后的所有操作都在这里执行。
汉化:
# 找到如下目录 kibana已经对应准备好了汉化
kibana-7.15.1-darwin-x86_64/x-pack/plugins/translations/translations/zh-CN.json
# 设置汉化
kibana-7.15.1-darwin-x86_64/config/kibana.yml
# 添加配置后重启kinaba
i18n.locale: "zh-CN"
ES核心概念
ES是面向文档的,一切都是JSON
关系型数据库与ES对比:
Relational DB | ES |
---|---|
数据库(database) | 索引(indices) |
表(tables) | 类型(types) |
行(rows) | 文档(documents) |
字段(columns) | fields |
IK分词器
下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.15.1
将解压出来的文件放到elastic search 的 plugins中
Exception in thread "main" java.nio.file.NotDirectoryException: /Users/mpy/tools/elasticsearch-7.15.1/plugins/.DS_Store
# 进入plugins目录
ls -a
# 删除.DS_Store
rm -rf .DS_Store
# 查看加载的插件
sh elasticsearch-plugin list
# 使用Kibana测试
分词测试
ik_smart为最少划分;ik_max_word为最细粒度划分,穷尽词库所有可能
添加自定义分词
# 查看分词配置
elasticsearch-7.15.1/plugins/ik/config/IKAnalyzer.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict"></entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords"></entry>
<!--用户可以在这里配置远程扩展字典 -->
<!-- <entry key="remote_ext_dict">words_location</entry> -->
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
# 在config中新建自己的dic分词文件 加入配置中即可
基本操作
method | url地址 | 描述 |
---|---|---|
PUT | localhost:9200/索引名称/类型名称/文档ID | 创建文档(指定文档ID) |
POST | localhost:9200/索引名称/类型名称 | 创建文档(随机文档ID) |
POST | localhost:9200/索引名称/类型名称/文档ID/_update | 修改文档 |
DELETE | localhost:9200/索引名称/类型名称/文档ID | 删除文档 |
GET | localhost:9200/索引名称/类型名称/文档ID | 通过文档ID查询文档 |
POST | localhost:9200/索引名称/类型名称/_search | 查询所有数据 |
测试
创建索引
PUT /test/type1/1
{
"name":"深圳南山第一小学",
"grade": "1,2"
}
索引规则
如果自己的文档字段没有指定类型,es会默认配置字段类型
PUT /test2
{
"mappings": {
"properties": {
"name": {
"type": "text"
},
"grade": {
"type": "text"
},
"createdAt" :{
"type": "date"
}
}
}
}
获取信息
# 获取索引信息
GET test2
# 通过_cat可以获取ES当前的信息
GET _cat/indices?v
修改索引
- PUT更新
PUT /test/_doc/1
{
"name":"深圳南山第二小学",
"grade":"1,2,3",
"createdAt":"2021-10-28 13:22:00"
}
- POST更新
POST /test/_doc/1/_update
{
"doc" : {
"name":"深圳南山第三小学",
"grade":"1,2,3",
"createdAt":"2021-10-28 13:22:00"
}
}
PUT方法如果没有设置值 会把之前数据修改为空。推荐使用POST方法更新数据
删除索引
通过url判断是删除索引还是删除文档
DELETE /test2
条件查询
GET /test/type1/_search?q=name:宝安小学
数据类型
官方地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html#_multi_fields_2