Elasticsearch起初在学习的时候也是查阅了相关官网资料和一些相关视频 总结了一些个人笔记方分享大家
相关文档资料:ELK中文手册
Elasticsearch官网中文手册
目录
背景:
1.安装IK分词器——在线安装
2.安装IK分词器——离线安装
2.1 IK分词器的两种分词模式
2.2 IK分词器添加扩展词库
2.3 扩展——词库热更新等
3.索引库的概念
4.索引库的增删改查
4.1创建索引库
4.2查看-删除 索引库
4.3修改索引库
5.文档的增删改查
5.1 添加文档
5.2查看文档 删除文档
5.3修改文档(包括全量修改和增量修改)
es在创建倒排索引时需要对文档分词;在搜索时,需要对用户输入內容分词。但默认的分词规则对中文处理并不友好 所以我们在使用Elasticsearch的时候最好安装一个分词器
#进入容器内部
docker exec-it elasticsearch/bin/bash
在线下载并安装
bin/elasticsearch-plugin install
https://github.com/medc1/elasticsearch-analysiik/releases/download/v7.12.1/e1asticsearch-analysis-ik-712 1. zip
#退出exlt重启容器
exit
#重启容器
docker restart elasticsearch
安装插件需要知道 elasticsearch的 Iplugins(数据卷)目录位置,而我们用了数据卷挂载,因此需要查看 elasticsearch的数据卷目录,通过下面命令查看:
docker volume inspect es-plugins
将我们下载好的压缩文件解压 上传到iplugins目录下
重启容器
docker restart es
#查看es日志
docker logs -f es
K分词器包含两种模式
ik_ smart:最少切分——粗粒度
ik_max_word:最细切分——最细粒度(内存占用更多)
IK分词器既然可以做到对语句进行分词 那么 这个的底层一定有一个类似于词典的东西,那么问题来了,随着我们越来越多的网络名称,这个词典一定有不能分辨的词出现,这个时候就需要对这个词典进行扩展词库了
==========
要拓展k分词器的词库,只需要修改一个k分词器目录中的 config目录中的 analyzer.cfg.xml文件
中文社区:ik分词器 - Elastic 中文社区
mapping类似于MySQL中数据的约束类型 ES中也有一套类似的规范
常见的mapping属性包括:
- 字符串:text(可分词文本)keyword(不可分词文本:国家 品牌)
- 数值:long、integer、short、byte、double、float
- 布尔类型:boolean
- 日期:date
- 对象:object
在mapping中没有数组的概念 但是可以同一种类型的词出现多次
ES中通过 Restful请求操作索引库、文档。请求内容用DSL语句来表示。创建索引库和 mapping的DSL语法如下
# 创建索引库
PUT /yibai
{
"mappings":{
"properties": {
# 信息 text类型 分词类型为ik_smart
"info":{
"type": "text",
"analyzer": "ik_smart"
},
# 邮箱 keyword类型 不创建索引(不写默认为创建)
"email":{
"type": "keyword",
"index": false
},
#姓名 object类型 姓名下边还有分类 第一个字 最后一个字 类型都是keyword
"name":{
"type": "object",
"properties": {
"firstName":{
"type":"keyword"
},
"lastName":{
"type":"keyword"
}
}
}
}
}
}
############注意 DSL语句中是不允许写注释的 这里为了方便理解加入代码内部注释##########
//查看索引库语法:
GET / 索引库名
GET / yibai
//删除索引库语法:
DELETE / 索引库名
DELETE / yibai
在es语法中是禁止修改索引库的 因为一开始已经创建好了倒排索引 修改完一个字段的话就会导致原来的倒排索引失效
索引库和 mapping-旦创建无法修改,但是可以添加新的字段,语法如下:
注意:新的字段名称一定不能和原来的重复 不然es会认为你在修改 就会报错
# 修改索引库(添加新字段)
PUT /yibai/_mapping
{
"properties" :{
"age":{
"type":"integer"
}
}
}
POST /索引库名/_doc/文档id
{
"字段1":"值1",
"字段2":"值2",
"字段2":{
"子属性1":"值3",
"子属性2":"值4"
}
}
// _doc 固定写法
GET /索引库名/_doc/文档id
//例如:
GET /yibai/_doc/1
====================分割线=================
// 删除文档
DELETE /索引库名/_doc/文档id
version属性:每次进行数据操作都会对version属性+1
全量修改
PUT /索引库名/_doc/文档id
{
"字段1":"值1",
"字段2":"值2"
}
============================
PUT /yibai/_doc/2
{
"age":23,
"info":"这里被修改了",
"email":"[email protected]",
"name":{
"firstName":"金",
"lastName":"蒂"
}
}
ps1:全量更改需要将所有的字段都加上,然后把需要改的进行更改,不然就会把没写上的字段删除
ps2:如果要查询的文档id没有的话 更新就会变成添加文档
更新
添加
增量修改
#局部修改文档字段
POST /yibai/_update/1
{
"doc": {
"info":"修改内容"
}
}
ps1:修改指定字段的内容需要将索引库后边的_doc改为_update
ps2:与全局修改不同的是不需要将所有字段都写上 但是需要加在"doc"下进行字段修改
总结:针对与ES的操作主要是对索引库和文档的操作 基本的增删改查和需要注意的地方就是这些了 记住一些关键字还是比较简单的