概述

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

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

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

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

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

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

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

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

添加索引

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

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

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

 

 结构化创建索引,

{
    "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请求,添加索引,发现创建成功。

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

 

 添加

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

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

 

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

看下添加的数据

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

 

 修改

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

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

 

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

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

 

 删除

删除文档

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

 

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

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

 

 

删除索引

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

 

索引已经都被我们删除

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

查询

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

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

 

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

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

 

 接下来进行条件查询

 1.查询所有

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

 

指定返回的数据

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

 

 模糊匹配查询

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

 聚合查询

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

 

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

对age字段进行聚合计算

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

 

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

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

高级查询

Query context(文本查询)

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

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

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

 

 多个字段匹配查询

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

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

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

 

 语法查询

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

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

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

 

 确定字段语法查询

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

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

 

 结构化字段的查询

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

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

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

 

 范围查询

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

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

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

 

Filter Context(条件过滤查询)

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

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

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

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

 

 复合查询

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

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

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

 

 分数为1的数据

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

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

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

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

 

 

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

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

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

 

 

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

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

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

 

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

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

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

 

相关文章: