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":"张三"
                }
            }
        }
    }
}

原文地址:https://www.cnblogs.com/dslx/p/12485549.html