• Elasticsearch基本操作,增,删,改,查


    概述

    在学习增删改查之前,先了解下基础知识。

    索引:含有相同属性的文档的集合;

    类型:索引可以定义一个或多个类型,文档必须属于一个类型;

    文档:文档是可以被索引的节本数据单位。

    看了是不是感觉很抽象,可以想象下跟数据库对应,索引就是一个数据库,数据库里的表就是一个类型,里面包含的一条一条数据就是文档。

    如:我们要设计一个图书管理系统,就需要有图书索引,学生索引,图书索引内又有不同的类型,教育类,科普类,小说类等图书

    分片:每个索引都有多个分片,每个分片是一个Lucene索引

    备份:拷贝一份分片就完成分片的备份

    添加索引

    RESTful API风格创建 http://<ip>:<port>/<索引>/<类型>/<文档>

    打开postman,有json检查比较容易读懂,不易错误。

     结构化创建索引,

    {
        "settion":{
            "number_of_shards":3,
            "number_of_replicas":1
        },
        "mappings":{
            "teacher":{
                "properties":{
                    "name":{
                        "type":"text"
                    },
                    "country":{
                        "type":"keyword"
                    },
                    "gender":{
                        "type":"text"
                    },
                    "age":{
                        "type":"integer"
                    },
                    "date":{
                        "type":"date",
                        "format":"yyy-MM-dd HH:mm:ss || yyyy-MM-dd"
                    }
                }
            }
        }
    }

    发送PUT请求,添加索引,发现创建成功。

     添加

    有了索引后,我们进行增加操作。按我们刚才创建的格式添加

    注意:我们id我们可以指定,也可以不指定,不指定就会帮我们自动创建一个。

    看下添加的数据

     修改

    修改es文档方式有两种,一种是直接修改,一种是脚本修改,我这边只介绍第一种。现在把刚才数据的性别改为女

     浏览数据,可以看到数据修改成功

     删除

    删除文档

    刷新数据可以看到已经被删除

    删除索引

    索引已经都被我们删除

     

    查询

    为了方便查询,我预先插入了十条数据

     我们查询文档id为1的数据

     接下来进行条件查询

     1.查询所有

    指定返回的数据

     

     模糊匹配查询

     聚合查询

     可以看到age字段12岁的有4个人,30岁的有两个人。

    对age字段进行聚合计算

     

     总共有10个数,最小的年龄为12岁,最大70岁,他们的平均值是27.7岁,加起来有277岁。

    高级查询

    Query context(文本查询)

    习语匹配 它与模糊匹配的查询比较,就比较精确了

    {
        "query":{
            "match_phrase":{
                "name":"张三"
            }
        }
    }

     多个字段匹配查询

    下列语句表示,张三这个字符串在两个字段,name和gender有的都匹配出来

    {
        "query":{
            "multi_match":{
                "query":"张三",
                "fields":["name","gender"]
            }
        }
    }

     语法查询

    下列语法表示查询字段含有张三或李四的数据

    {
        "query":{
            "query_string":{
                "query":"张三 OR 李四"
            }
        }
    }

     确定字段语法查询

    {
        "query":{
            "query_string":{
                "query":"张三 OR 李四 OR 男",
                "fields":["name","country"]
            }
        }
    }

     结构化字段的查询

    下列表示查询年龄在12岁的数据

    {
        "query":{
            "term":{
                "age":12
            }
        }
    }

     范围查询

    下列查询年龄段12岁到100岁之间的数据

    {
        "query":{
            "range":{
                "age":{
                    "gte":12,
                    "lte":100
                }
            }
        }
    }

    Filter Context(条件过滤查询)

     查询过程中只判断文档是否满足条件,只有Yes和No,这是与Query查询所不同的,不用考虑查询到的数据匹配有多好。

    下列查询字段age为12岁的数据

    {
        "query":{
            "bool":{
                "filter":{
                    "term":{
                        "age":"12"
                    }
                }
            }
        }
    }

     复合查询

    固定分数查询(不支持match)

    {
        "query":{
            "constant_score":{
                "filter":{
                    "match":{
                        "name":""
                    }
                }
            }
        }
    }

     分数为1的数据

    {
        "query":{
            "constant_score":{
                "filter":{
                    "match":{
                        "name":""
                    }
                },
                "boost":1
            }
        }
    }

     下列表示OR的关系,名字等于张三或性别为nv的数据

    {
        "query":{
            "bool":{
                "should":[
                    {
                        "match":{
                            "name":"张三"
                        }
                    },
                    {
                        "match":{
                            "gender":""
                        }
                    }
                    ]
            }
        }
    }

     下列表示AND查询name字段必须为张三,性别也要为女的数据,显然我们的数据是没有的

    {
        "query":{
            "bool":{
                "must":[
                    {
                        "match":{
                            "name":"张三"
                        }
                    },
                    {
                        "match":{
                            "gender":""
                        }
                    }
                    ]
            }
        }
    }

     下列查询数据name字段必须包含有周,且性别为男,且等于12岁

    {
        "query":{
            "bool":{
                "must":[
                    {
                        "match":{
                            "name":""
                        }
                    },
                    {
                        "match":{
                            "gender":""
                        }
                    }
                    ],
                    "filter":{
                        "term":{
                            "age":12
                        }
                    }
                    
            }
        }
    }

     下列查询除张三以外的数据

    {
        "query":{
            "bool":{
                "must_not":{
                    "term":{
                        "name":"张三"
                    }
                }
            }
        }
    }

  • 相关阅读:
    关于浏览器及系统的判断
    toggle与slideToggle
    安卓与ios的不同处理
    关于常用循环遍历获取数据
    docker
    Mysql
    rabbitMQ的使用转载
    Git命令行
    vue项目创建完整版
    redis操作(str.hash.list.set)
  • 原文地址:https://www.cnblogs.com/dslx/p/12485549.html
Copyright © 2020-2023  润新知