第二篇、ElasticSearch数据的增删改查

1、文档的增删改查操作

1.1、增加文档

PUT t1/doc/1
{
 "name": "张三",
 "age": 18
}

1.2、查询文档

GET t1/doc/1
GET t1/doc/_search?q=age:18
GET t1/doc/_search { "query":{ "match":{ "age":"18" } } }

1.3、修改文档数据

POST t1/doc/1/_update
{
"doc":{
"name":"李五"
}
}

1.4、删除文档数据

delete t1/doc/1
{
  "name":"李四"
}

2、索引的操作

2.1、查询索引

get _cat/indices?v

2.2、查询指定的索引信息

get t1

2.3、查询索引下面所有数据

GET t1/doc/_search

2.4、删除索引

DELETE /t1

5、判断索引是否存在

HEAD 索引名字

200:表示存在
404:表示不存在

3、match查询

PUT zhifou/doc/1
{
  "name":"顾老二",
  "age":30,
  "from": "gu",
  "desc": "皮肤黑、武器长、性格直",
  "tags": ["", "", ""]
}

PUT zhifou/doc/2
{
  "name":"大娘子",
  "age":18,
  "from":"sheng",
  "desc":"肤白貌美,娇憨可爱",
  "tags":["", "",""]
}

PUT zhifou/doc/3
{
  "name":"龙套偏房",
  "age":22,
  "from":"gu",
  "desc":"mmp,没怎么看,不知道怎么形容",
  "tags":["造数据", "",""]
}


PUT zhifou/doc/4
{
  "name":"石头",
  "age":29,
  "from":"gu",
  "desc":"粗中有细,狐假虎威",
  "tags":["", "",""]
}

PUT zhifou/doc/5
{
  "name":"魏行首",
  "age":25,
  "from":"广云台",
  "desc":"仿佛兮若轻云之蔽月,飘飘兮若流风之回雪,mmp,最后竟然没有嫁给顾老二!",
  "tags":["闭月","羞花"]
}
增加测试数据

3.1、match,查看from字段包含 gu的数据

GET zhifou/doc/_search
{
  "query": {
    "match": {
      "from": "gu"
    }
  }
}

3.2、match_all,查询所有,类似SQL,select * from tabel_name

GET zhifou/doc/_search
{
  "query": {
    "match_all": {
    }
  }
}

3.3、match_phrase,短语查询

PUT t1/doc/1
{
  "title": "中国是世界上人口最多的国家"
}
PUT t1/doc/2
{
  "title": "美国是世界上军事实力最强大的国家"
}
PUT t1/doc/3
{
  "title": "北京是中国的首都"
}
测试数据
GET t1/doc/_search
{
  "query": {
    "match_phrase": {
      "title": "中国"
    }
  }
}

# match_phrase与match的区别
match : 按分类值排序,不管匹配不匹配得到都会显示出来
match_phrase :精确匹配,有出现的关键字才会显示出来

3.4、slop 指定位切片模糊匹配

GET t1/doc/_search
{
  "query": {
    "match_phrase": {
      "title":{
        "query": "中国世界",
        "slop": 2
      }
    }
  }
}

4、match_phrase_prefix,最左前缀查询

PUT t3/doc/1
{
  "title": "maggie",
  "desc": "beautiful girl you are beautiful so"
}
PUT t3/doc/2
{
  "title": "sun and beach",
  "desc": "I like basking on the beach"
}
测试数据
GET t3/doc/_search
{
  "query": {
    "match_phrase_prefix": {
      "desc": "bea"
    }
  }
}
# 限制最大的查询次数,提高性能
GET t3/doc/_search
{
  "query": {
    "match_phrase_prefix": {
      "desc": {
        "query": "bea",
        "max_expansions": 1
      }
    }
  }
}

5、multi_match :多字段查询

PUT t3/doc/1
{
  "title": "maggie is beautiful girl",
  "desc": "beautiful girl you are beautiful so"
}
PUT t3/doc/2
{
  "title": "beautiful beach",
  "desc": "I like basking on the beach,and you? beautiful girl"
}
测试数据

 5.1、原来的查询方法

GET t3/doc/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "title": "beautiful"
          }
        },
        {
          "match": {
            "desc": "beautiful"
          }
        }
      ]
    }
  }
}

 5.2、multi_match 查询方法

GET t3/doc/_search
{
  "query": {
    "multi_match": {
      "query": "beautiful",
      "fields": ["title","desc"]
    }
  }
}

 5.3、type: phrase_prefix ,糊模匹配后缀

GET t3/doc/_search
{
  "query": {
    "multi_match": {
      "query": "gi",
      "fields": ["title"],
      "type": "phrase_prefix"
    }
  }
}

5.4、type: phrase ,精确匹配词

GET t3/doc/_search
{
  "query": {
    "multi_match": {
      "query": "maggie",
      "fields": ["title"],
      "type": "phrase"
    }
  }
}

5.5、term查询

主要作用:用于查询分词后,在分词里面查询关键字并且返回完整数据
# 模拟es分词结果
POST _analyze
{
  "analyzer": "standard",
  "text": "Beautiful girl!"
}

# 创建一个索引结构
PUT w10
{
  "mappings": {
    "doc":{
      "properties":{
        "t1":{
          "type": "text"
        }
      }
    }
  }
}

# 插入数据
PUT w10/doc/1
{
  "t1": "Beautiful girl!"
}

PUT w10/doc/2
{
  "t1": "sexy girl!"
}

# 查询数据
GET w10/doc/_search
{
  "query": {
    "match": {
      "t1": "Beautiful girl!"
    }
  }
}

# 查分词后,分词里面的数据
GET w10/doc/_search
{
  "query": {
    "term": {
      "t1" : ["beeautiful","sexy"]
    }
  }
}

5.6、布尔查询

must:与关系,相当于关系型数据库中的and。
should:或关系,相当于关系型数据库中的or。
must_not:非关系,相当于关系型数据库中的not。
filter:过滤条件。
range:条件筛选范围。
gt:大于,相当于关系型数据库中的>。
gte:大于等于,相当于关系型数据库中的>=。
lt:小于,相当于关系型数据库中的<。
lte:小于等于,相当于关系型数据库中的<=。
布尔查询是最常用的组合查询,根据子查询的规则,只有当文档满足所有子查询条件时,
elasticsearch引擎才将结果返回。布尔查询支持的子查询条件共4中:
1、must(and2、should(or3、must_not(not4、filter
PUT zhifou/doc/1
{
  "name":"顾老二",
  "age":30,
  "from": "gu",
  "desc": "皮肤黑、武器长、性格直",
  "tags": ["", "", ""]
}

PUT zhifou/doc/2
{
  "name":"大娘子",
  "age":18,
  "from":"sheng",
  "desc":"肤白貌美,娇憨可爱",
  "tags":["", "",""]
}

PUT zhifou/doc/3
{
  "name":"龙套偏房",
  "age":22,
  "from":"gu",
  "desc":"mmp,没怎么看,不知道怎么形容",
  "tags":["造数据", "",""]
}


PUT zhifou/doc/4
{
  "name":"石头",
  "age":29,
  "from":"gu",
  "desc":"粗中有细,狐假虎威",
  "tags":["", "",""]
}

PUT zhifou/doc/5
{
  "name":"魏行首",
  "age":25,
  "from":"广云台",
  "desc":"仿佛兮若轻云之蔽月,飘飘兮若流风之回雪,mmp,最后竟然没有嫁给顾老二!",
  "tags":["闭月","羞花"]
}
准备数据

1、must : 查询多维数据,关系为且(and)

# 单条件查询
GET zhifou/doc/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "from": "gu"
          }
        }
      ]
    }
  }
}

# 多条件查询
GET zhifou/doc/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "from": "gu"
          }
        },
        {
          "match": {
            "age": "22"
          }  
        }
      ]
    }
  }
}

5.7、should: 查询多维数据,关系为或(or)

GET zhifou/doc/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "from": "gu"
          }
        },
        {
          "match": {
            "tags": "闭月"
          }
        }
      ]
    }
  }
}

5.8、、must_not :查询多维数据,关系为取反(not)

# 取既不是"from": "gu",也不是"tags": "可爱",也不是 "age": "18"的数据
GET zhifou/doc/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "match": {
            "from": "gu"
          }
        },
        {
          "match": {
            "tags": "可爱"
          }
        },
        {
          "match": {
            "age": "18"
          }
        }
      ]
    }
  }
}

5.9、filter 过滤数据

filter:过滤条件。
range:条件筛选范围。
gt:大于,相当于关系型数据库中的>。
gte:大于等于,相当于关系型数据库中的>=。
lt:小于,相当于关系型数据库中的<。
lte:小于等于,相当于关系型数据库中的<=。
# 查询from=gu,并且年龄大于25
GET zhifou/doc/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "from": "gu"
          }
        }
      ],
      "filter": {
        "range": {
          "age": {
            "gt": 25
          }
        }
      }
    }
  }
}

# 查询from=gu,并且看年龄25-30
GET zhifou/doc/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "from": "gu"
          }
        }
      ],
      "filter": {
        "range": {
          "age": {
            "gte": 25,
            "lte": 30
          }
        }
      }
    }
  }
}

6、排序

PUT s22/doc/1
{
  "name": "张磊",
  "age": 29,
  "desc": "大帅x, 腰不好",
  "tag": ["针灸", "爱推拿"],
  "both": "1980-12-12",
  "city": "河北"
}


PUT s22/doc/2
{
  "name": "罗新宇",
  "age": 26,
  "desc": "小帅x, shen不好",
  "tag": ["针灸", "爱推拿"],
  "both": "1988-12-12",
  "city": "山东"
}

PUT s22/doc/3
{
  "name": "苏守丽",
  "age": 18,
  "desc": "大美妞, 天生丽质难自弃",
  "tag": ["", "fu", "", "可爱"],
  "both": "1999-08-15",
  "city": "山西"
}

PUT s22/doc/4
{
  "name": "崔雪飞",
  "age": 18,
  "desc": "大美女, 天生丽质难自弃",
  "tag": ["", "fu", "", "乖巧"],
  "both": "1999-08-15",
  "city": "辽宁"
}


PUT s22/doc/5
{
  "name": "he明明",
  "age": 25,
  "desc": "大美女, 天生丽质难自弃",
  "tag": ["", "fu", "", "乖巧"],
  "both": "1999-08-15",
  "city": "河北"
}



PUT s22/doc/6
{
  "name": "何青青",
  "age": 28,
  "desc": "大美女, 天生丽质难自弃",
  "tag": ["", "fu", "", "乖巧"],
  "both": "1999-08-15",
  "city": "河北"
}
准备数据
# 降序
GET s22/doc/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ]
}

# 升序
GET s22/doc/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "age": {
        "order": "asc"
      }
    }
  ]
}

7、分页

# 从第3个开始,显示2条数据
GET s22/doc/_search
{
  "query": {
    "match_all": {}
  },
  "from": 3,
  "size": 2
}

8、_source : 显示指定字段的数据

# 查询数据的结果显示city,age两个字段
GET s22/doc/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "city": "河北"
          }
        }
      ],
      "filter": {
        "range": {
          "age": {
            "gte": 28
          }
        }
      }
    }
  },
  "_source": ["city","age"]
}

 

posted @ 2022-11-06 20:19  小粉优化大师  阅读(218)  评论(0编辑  收藏  举报