当前位置:   article > 正文

es字段增删改查_es 更新字段

es 更新字段

es字段增删改查

1.关系型数据库和es对比

Relational DBElasticSearch
数据库(database)索引(indices)
表(tables)types (慢慢会被弃用)
行(rows)documents(文档)
字段(columns)fields

elasticsearch(集群)中可以包含多个索引(数据库) ,每个索引中可以包含多个类型(表) ,每个类型下又包含多个文档(行) ,每个文档中又包含多个字段(列)。

2.分词测试

ik_smart:最少切分;
ik_max_word:最细粒度划分(穷尽词库的可能);
注:可以自定义词典

GET _analyze
{
  "analyzer": "ik_smart",
  "text": "年轻人喜欢学习java"
  
}
------------------------------------------------------------


GET _analyze
{
  "analyzer": "ik_max_word",
  "text": "年轻人喜欢学习java"
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

3.Rest风格说明

在这里插入图片描述
注:_doc 默认类型(default type),type 在未来的版本中会逐渐弃用,因此产生一个默认类型进行代替

测试

创建一个索引,添加

PUT /test1/type1/1
{
"name" : "小白撑伞",
"age" : 18
}
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

3.字段数据类型

字符串类型:
text:支持分词,全文检索,支持模糊、精确查询,不支持聚合,排序操作;text类型的最大支持的字符长度无限制,适合大字段存储;
keyword:不进行分词,直接索引、支持模糊、支持精确匹配,支持聚合、排序操作。超过给定长度后的数据将不被索引,无法通过term精确匹配检索返回结果。
数值型:
long、Integer、short、byte、double、float、half float、scaled float
日期类型:
date
布尔类型:
boolean
二进制类型:
binary
等等。。。

测试:
指定字段的类型(使用PUT)

PUT /test2
{
"mappings": {
"properties": {
"name": {
"type": "text"
},
"age":{
"type": "long"
},
"birthday":{
"type": "date"
}
}
}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

修改(2种方案):
①旧的(使用put覆盖原来的值)
版本+1(_version);
但是如果漏掉某个字段没有写,那么更新是没有写的字段 ,会消失;

PUT /test3/_doc/1
{
"name" : "小白撑伞",
"age" : 18,
"birth" : "1999-10-10"
}
 
GET /test3/_doc/1
 
// 修改会有字段丢失
PUT /test3/_doc/1
{
"name" : "小白"
}
 
GET /test3/_doc/1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

②新的(使用post的update)
version不会改变;
需要注意doc;
不会丢失字段;

POST /test3/_doc/1/_update
{
"doc":{
"name" : "post修改,version不会加一",
"age" : 2
}
}
 
GET /test3/_doc/1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

删除:

DELETE /test1
  • 1

查询(简单条件):

GET /test3/_doc/_search?q=name:小白
  • 1

复杂查询:
在这里插入图片描述

①查询匹配
match:匹配(会使用分词器解析(先分析文档,然后进行查询))

_source:过滤字段(需要哪些字段显示)

sort:排序(asc:升序;desc:降序)

form、size 分页(查询开始页,查询页码数)

// 查询匹配(match)
GET /blog/user/_search
{
"query":{
"match":{
"name":"流"
}
}
,
"_source": ["name","desc"]
,
"sort": [
{
"age": {
"order": "asc"
}
}
]
,
"from": 0
,
"size": 1
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

②多条件查询(bool)
must 相当于 and
should 相当于 or
must_not 相当于 not (… and …)
filter 过滤

GET /blog/user/_search
{
"query":{
"bool": {
"must": [
{
"match":{
"age":3
}
},
{
"match": {
"name": "流"
}
}
],
"filter": {
"range": {
"age": {
"gte": 1,
"lte": 3
}
}
}
}
}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

③匹配数组
貌似不能与其它字段一起使用
可以多关键字查(空格隔开)— 匹配字段也是符合的
match 会使用分词器解析(先分析文档,然后进行查询)

GET /blog/user/_search
{
"query":{
"match":{
"desc":"年龄 牛 大"
}
}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

④精确查询
term 直接通过 倒排索引 指定词条查询
适合查询 number、date、keyword ,不适合text

GET /blog/user/_search
{
"query":{
"term":{
"desc":"年 "
}
}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

⑤text和keyword
text:
支持分词,全文检索、支持模糊、精确查询,不支持聚合,排序操作;
text类型的最大支持的字符长度无限制,适合大字段存储;
keyword:
不进行分词,直接索引、支持模糊、支持精确匹配,支持聚合、排序操作。
keyword类型的最大支持的长度为——32766个UTF-8类型的字符,可以通过设置ignore_above指定自持字符长度,超过给定长度后的数据将不被索引,无法通过term精确匹配检索返回结果。

// 测试keyword和text是否支持分词
// 设置索引类型
PUT /test
{
    "mappings": {
        "properties": {
            "text":{
                "type":"text"
             },
            "keyword":{
                "type":"keyword"
             }
        }
    }
}
 
 
 
// 设置字段数据
PUT /test/_doc/1
{
"text":"测试keyword和text是否支持分词",
"keyword":"测试keyword和text是否支持分词"
}
 
 
 
// text 支持分词
// keyword 不支持分词
GET /test/_doc/_search
{
    "query":{
        "match":{
            "text":"测试"
        }
    }
}// 查的到
 
GET /test/_doc/_search
{
        "query":{
            "match":{
                "keyword":"测试"
            }
        }
}// 查不到,必须是 "测试keyword和text是否支持分词" 才能查到
 
 
GET _analyze
{
"analyzer": "keyword",
"text": ["测试liu"]
}// 不会分词,即 测试liu
 
 
 
GET _analyze
{
"analyzer": "standard",
"text": ["测试liu"]
}// 分为 测 试 liu
 
 
GET _analyze
{
"analyzer":"ik_max_word",
"text": ["测试liu"]
}// 分为 测试 liu
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68

⑥高亮查询
会在字体中加入默认标签也可以自定义

/// 高亮查询
GET blog/user/_search
{
"query": {
"match": {
"name":"流"
}
}
,
"highlight": {
"fields": {
"name": {}
}
}
}
// 自定义前缀和后缀
GET blog/user/_search
{
"query": {
"match": {
"name":"流"
}
}
,
"highlight": {
"pre_tags": "<p class='key' style='color:red'>",
"post_tags": "</p>",
"fields": {
"name": {}
}
}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/68001
推荐阅读
相关标签
  

闽ICP备14008679号