前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ElasticSearch之基本用法API

ElasticSearch之基本用法API

作者头像
蒋老湿
修改2019-12-09 14:22:34
7470
修改2019-12-09 14:22:34
举报
文章被收录于专栏:技术栈技术栈

索引的创建

ElasticSearch的RESTFul API基本格式:

  • http://<ip>:<port>/<索引>/<类型>/<文档id>
  • 常用HTTP动词:GET / POST / PUT / DELETE
  • 非结构化的创建索引:

创建索引完成后,可以在概览页面中查看到分片的信息,细框的分片是粗框分片的备份或者说副本:

我们通过查看索引信息来确定该索引是非结构化还是结构化的:

  1. 以上我们创建了非结构化的索引,以及知道了如何查看索引信息。接下来我们创建结构化的索引,进入复合查询页面,指定一个索引,并编写结构化的数据,最后提交请求:

成功后,查看索引信息,可以看到我们所编写的结构化数据,这种就是结构化的索引:

  1. 其实使用es-head插件来创建结构化索引并不是很方便,编写JSON格式的结构化数据时比较蛋疼,没有智能的格式化功能。我们也可以使用postman来创建结构化的索引,基本上只要能模拟http请求的工具,都能用来创建es的结构化索引。如下:

上图中的ip和端口为es服务的ip及端口,people则是需要创建的索引名称。

映射的JSON数据如下:

代码语言:txt
复制
{
    "settings": {  
        "number_of_shards": 3,  // 分片的数量
        "number_of_replicas": 1  // 副本的数量
    },
    "mappings": {  // 索引所映射的结构化数据
        "man": {
            "properties": {
                "name": {
                    "type": "text"
                },
                "country": {
                    "type": "keyword"
                },
                "age": {
                    "type": "integer"
                },
                "date": {
                    "type": "date",
                    "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
                }
            }
        },
        "woman": {

        }
    }
}

提交请求成功后所反馈的信息:

可以到es-head的概览界面上,查看到新创建的索引:

插入

es的插入分为:

  • 指定文档id插入
  • 自动产生文档id插入 指定文档id插入,示例:

简单说明:

  • people 索引
  • man 类型
  • 1 文档id 发送请求成功,即成功指定文档id插入数据:

到es-head的数据浏览页面上,可以看到我们刚刚插入的数据:

以上就是指定文档id的方式插入数据,接下来我们看看如何让es自动产生文档id来插入数据:

发送请求成功,es自动生成的id如下:

到es-head的数据浏览页面上,验证我们刚刚插入的数据:

修改

es有两种修改文档数据的方式:

  • 直接修改文档
  • 脚本修改文档 直接修改文档的方式,示例:

修改成功,返回信息如下:

文档id为1的name数据成功修改为test_name:

脚本修改文档的方式,示例:

注:es支持多种脚本语言,这里只是拿了lang来做例子

修改成功,返回信息如下:

因为当时设置age的值时,设置成了字符串类型,而字符串的相加是连接,所以文档id为1的age数据变成了2010:

我们还可以把数据放到外面,放在params里面,然后在脚本代码里引用这个数据即可,如下示例:

修改成功后,如下:

删除

关于es的删除操作,我们主要介绍以下两种:

  • 删除文档
  • 删除索引 删除文档,示例:

此时就只剩一个文档数据了:

在es-head上,删除索引,示例:

确认删除:

删除成功,索引下的所有数据都会被删除:

使用postman等工具,删除索引,示例:

删除成功:

注:删除索引是一个非常危险的操作,需要谨慎删除,免得删库跑路。

查询

es常用的查询语法:

  • 简单查询
  • 条件查询
  • 聚合查询 我这里已经事先准备好了一个结构化的索引:

以及一些数据:

简单查询,就是直接使用GET方式访问需要查询的 索引->类型->文档id 即可,示例:

条件查询,我们来查询book索引下的所有数据:

查询结果如下:

简单说明:

  • took 查询耗时
  • time_out 是否超时
  • _shards 分片信息
  • hits 本次查询的数据都放在这里,默认只包含十条数据 我们可以通过如下两个参数来定义查询多少条数据,例如我指定只查询一条数据:

查询结果如下:

通过关键字进行模糊查询:

查询结果如下:

我们可以指定排序查询结果的方式,示例:

以上我们介绍了简单查询及条件查询,接下来我们简单介绍一下聚合查询,单组聚合查询示例:

代码语言:txt
复制
{
    "aggs": {
        "group_by_word_count": {
            "terms": {
                "field": "word_count"
            }
        }
    }
}

查询的聚合结果如下:

多组聚合查询示例:

代码语言:txt
复制
{
    "aggs": {
        "group_by_word_count": {
            "terms": {
                "field": "word_count"
            }
        },
        "group_by_publish_date": {
            "terms": {
                "field": "publish_date"
            }
        }
    }
}

查询的聚合结果如下:

代码语言:txt
复制
{
...
"aggregations": {
        "group_by_publish_date": {
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 0,
            "buckets": [
                {
                    "key": 981158400000,
                    "key_as_string": "2001-02-03 00:00:00",
                    "doc_count": 1
                },
                {
                    "key": 994809600000,
                    "key_as_string": "2001-07-11 00:00:00",
                    "doc_count": 1
                },
                {
                    "key": 1107388800000,
                    "key_as_string": "2005-02-03 00:00:00",
                    "doc_count": 1
                },
                {
                    "key": 1121040000000,
                    "key_as_string": "2005-07-11 00:00:00",
                    "doc_count": 1
                },
                {
                    "key": 1215734400000,
                    "key_as_string": "2008-07-11 00:00:00",
                    "doc_count": 1
                },
                {
                    "key": 1278806400000,
                    "key_as_string": "2010-07-11 00:00:00",
                    "doc_count": 1
                },
                {
                    "key": 1310342400000,
                    "key_as_string": "2011-07-11 00:00:00",
                    "doc_count": 1
                },
                {
                    "key": 1341964800000,
                    "key_as_string": "2012-07-11 00:00:00",
                    "doc_count": 1
                }
            ]
        },
        "group_by_word_count": {
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 0,
            "buckets": [
                {
                    "key": 195616,
                    "doc_count": 2
                },
                {
                    "key": 1000,
                    "doc_count": 1
                },
                {
                    "key": 5000,
                    "doc_count": 1
                },
                {
                    "key": 26000,
                    "doc_count": 1
                },
                {
                    "key": 63056,
                    "doc_count": 1
                },
                {
                    "key": 69056,
                    "doc_count": 1
                },
                {
                    "key": 1233616,
                    "doc_count": 1
                }
            ]
        }
    }
}   

除了可以分组聚合查询外,还可以进行统计查询等,与数据库中的聚合函数有些相似,如下示例:

代码语言:txt
复制
{
    "aggs": {
        "grades_word_count": {
            "stats": {
                "field": "word_count"  // 以word_count作为统计字段
            }
        }
    }
}

查询的统计结果如下:

代码语言:txt
复制
{
    ...
    "aggregations": {
        "grades_word_count": {
            "count": 8,
            "min": 1000,
            "max": 1233616,
            "avg": 223620,
            "sum": 1788960
        }
    }
}    
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年10月03日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 插入
  • 修改
  • 删除
  • 查询
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档