elasticsearch基本操作

基础

本教程使用es8.6.0与kibana作为测试环境

打开开发工具

image-20230119151803527

## 1.查看节点信息
GET /_cat/nodes?v
## 2.查看节点健康状态
GET _cluster/health
## 3.创建索引库
PUT /moon_db
## 4.查寻索引库
GET /moon_db
## 5.删除索引库
DELETE /moon_db
## 6.判断索引库是否存在
HEAD /moon_db

1.创建索引库时设置分词器、分片数和副本数
PUT /moon_db
{
  "settings":{
    "number_of_shards": 2,
    "number_of_replicas": 2,
    "index":{
      "analysis.analyzer.default.type":"ik_max_word"
    }
  }
}
## 2.创建文档
##  如果id不存在,创建新的文档,否则先删除现有文档,再创建新的文档,版本会增加
##  如果是_create命令,id存在则会报错
##  如果用POST命令,带着ID则使用指定ID,否在由ES生成一个ID
PUT /moon_db/_doc/1
{
  "name":"张三",
  "sex":1,
  "age":18,
  "poem":"连雨不知春去,一晴方觉夏深"
}

POST /moon_db/_doc/
{
  "name":"孙八",
  "sex":1,
  "age":30,
  "poem":"清江一曲抱村流,长夏江村事事幽"
}
## 3.查寻数据
GET /moon_db/_doc/1
## 4.更新:PUT|POST ID一致相当于全量更新
##   部分更新:_update
POST /moon_db/_update/1
{
  "doc": {
    "name":"张三峰"
  }
}
## 5.条件更新: _update_by_query
##   如果原文档,无ages属性,则会创建ages,并赋值
POST /moon_db/_update_by_query
{
  "query": {
    "match": {
      "_id": "1"
    }
  },
  "script": {
    "source": "ctx._source.ages = 30"
  }
}
## 6.并发时读后写版本控制:
##   _seq_no:数据序列号,同_version,数据变更时严格递增
##   _primary_term:分区版本,主分区重新分配(重启、Primary选举等),版本递增
PUT /moon_db/_doc/1?if_seq_no=11&if_primary_term=1
{
  "name":"张三峰",
  "age":18,
  "poem":"连雨不知春去,一晴方觉夏深"
}
## 7.条件查询
GET /moon_db/_search?from=0&size=10
{
  "query": {
    "term": {
      "age": 30
    }
  }
}

两种模式:

ik_smart
按照内存/计算力消耗最少来分析

image-20230119152925555

ik_max_word
按照搜索效果最大来划分

image-20230119153110260

ik分词器词库拓展

字典:这里指的是ik分词器的合法词语组成的集合

修改ik分词器的config目录的IKAnalyzer.cfg.xml文件

设置ext.dic是扩展词库,

<!--用户可以在这里配置自己的扩展字典-->
<entry key="ext_dict">ext.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords">stopword.dic</entry>
<!--用户可以在这里配置远程扩展字典-->
<!-- <entry key="remote_ext_dict" >words_location</entry> -->
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->

然后新建一个文件为ext.dic,在里面添加词,作为扩展词库

然后目录里有stopword.dic,在里面添加词,作为停用词库:(放不会分词的单词,比如脏话,语气词等词语)

image-20230119161052892

添加个人词典:

image-20230119170632699

添加停用词:

image-20230119164715937

这里还有其他词库:量词后缀啥的,用的时候再看

image-20230119164037292

记得保存了重启生效

docker restart es
docker restart kibana

测试:

image-20230119171011107

可见停用词"希特勒",“的"都不见了,但是出现了完整的"奥力给”.

"yyds"没有分出来,可能在原本的英语分词中还是以空格分词为主,所以不会进行切分

索引库操作

mapping映射属性

mapping是对索引库中文档的约束

常见的属性:

type

字段数据类型,常见的类型:

​ 字符串: text(可分词的文本),keyword(精确值,比如:品牌、国家、邮箱)

​ 数值: long,integer,short,byte,double,float

​ 布尔: boolean

​ 日期: date

​ 对象: object

es中没有数组类型,但是会理解成多个值分别解析,

index

是否创建索引,默认为true(是否参与搜索)

analyzer

使用哪种分词器,一般我们用ik_smart,和text结合使用

properties

该字段(属性)的子字段(属性)

索引库的CRUD
创建
PUT /syk1
{
  "mappings": {
    "properties": {
      "info":{
        "type": "text",
        "analyzer": "ik_smart"
      },
      "email":{
        "type": "keyword",
        "index": false
      },
      "name":{
        "type": "object",
        "properties": {
          "firstName": {
            "type":"keyword"
          },
          "lastName":{
            "type": "keyword"
          }
        }
      }
    }
  }
}

image-20230119175835900

修改

事实上不允许进行修改,但是可以添加新字段

PUT /syk1/_mapping
{
  "properties": {
    "age":{
      "type": "integer"
    }
  }
}

添加成功:

image-20230119215041599

查询
GET /syk1

image-20230119214944228

删除
DELETE /syk1

删除成功

image-20230119215153380

文档操作

都是在索引库名后面加上_doc/文档id

文档:

创建

POST /索引库名/_doc/文档id

#插入文档
POST /syk1/_doc/1
{
  "info": "太少了希特勒顺利打开斯克空难 yyds ",
  "email":"11222211@qq.com",
  "name":{
    "firstName": "可",
    "lastName": "李"
  }
}

image-20230119225335862

查询
GET /syk1/_doc/1

image-20230119231315712

修改

全量修改

#修改文档
#全量修改(删除再添加(按道理来说可以替代post新增操作))
PUT /syk1/_doc/1
{
  "info":"立刻就会十五年借款期限",
  "email":"22222222222222@qq.com",
  "name":{
    "firstName":"李",
    "lastName":"对"
  }
}

image-20230119232018299

增量修改

#增量修改
POST /syk1/_update/1
{
  "doc":{
    
    "name":{
      "firstName":"刘"
    }
  }
}

image-20230119232229916

删除

使用的乐观锁思想,删除不是真删除,所以删除之后再添加会有版本迭代现象

#删除文档
DELETE /syk1/_doc/1

image-20230119234022242

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值