博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ElasticSearch学习笔记 - 钢钢更新
阅读量:6708 次
发布时间:2019-06-25

本文共 6234 字,大约阅读时间需要 20 分钟。

背景

本文总结ElasticSearch的一些常用命令和用法,会长期更新,希望对大家有所帮助。

常见操作

新建映射(mapping)

curl -X PUT 'localhost:9200/accounts' -H 'Content-Type: application/json' -d'{  "mappings": {    "person": {      "properties": {        "last_name": {          "type": "text"        },        "first_name": {          "type": "text"        },        "sex": {          "type": "keyword"        },        "age": {          "type": "integer"        },        "city": {          "type": "keyword"        },        "comment": {          "type": "text"        }      }    }  }}'复制代码

新建文档(document)

curl -XPOST http://localhost:9200/accounts/person/1/ -d '{  "last_name": "wang",  "first_name": "kenny",  "sex": "male",  "age": 35,  "city": "hangzhou",  "comment": "kenny works for apbtour. "}'curl -XPOST http://localhost:9200/accounts/person/2 -d '{  "last_name": "wang",  "first_name": "bob",  "sex": "male",  "age": 40,  "city": "shanghai",  "comment": "bob works for apbtour. "}'curl -XPOST http://localhost:9200/accounts/person/3 -d '{  "last_name": "tao",  "first_name": "jialin",  "sex": "female",  "age": 34,  "city": "hangzhou",  "comment": "jialin works in hangzhou. "}'curl -XPOST http://localhost:9200/accounts/person/4 -d '{  "last_name": "jiang",  "first_name": "jockey",  "sex": "male",  "age": 30,  "city": "shanghai",  "comment": "jockey works for apbtour. "}'curl -XPOST http://localhost:9200/accounts/person/5 -d '{  "last_name": "yue",  "first_name": "qun",  "sex": "female",  "age": 29,  "city": "shanghai",  "comment": "yue qun does not works for apbtour. "}'复制代码

当前索引数据如下:

简单查询

查询记录(http方式)

http://localhost:9200/accounts/person/_search?q=last_name:wang GET复制代码

查询记录(curl方式)

curl -XGET 'localhost:9200/accounts/person/_search?pretty' -d '{  "query": {    "term": {      "last_name": "wang"    }  }}'复制代码

查询返回指定字段

curl -XPOST 'localhost:9200/accounts/person/_search?pretty' -d '{  "query": { "match_all": {} },  "_source": ["last_name", "first_name"]}'复制代码

查询特定范围(页数)的查询

以下语句显示第3 - 5条记录

curl -XPOST 'localhost:9200/accounts/person/_search?pretty' -d '{  "query": { "match_all": {} },  "from": 2,  "size": 3}'复制代码

查询特定ID值的数据

curl -XGET 'localhost:9200/accounts/person/_search?pretty' -d '{  "query": {    "terms": {      "_id": ["1","4"]    }  }}'复制代码

更新特定ID值的数据

curl -XPUT 'localhost:9200/accounts/person/1' -H 'Content-Type: application/json' -d '{    "last_name" : "Wang",    "first_name" : "fanggang"}'复制代码

删除特定ID的数据

curl -X DELETE 'localhost:9200/accounts/person/7'复制代码

复合查询

单一搜索条件

curl -XPOST 'localhost:9200/accounts/person/_search?pretty' -d '{  "query": { "match": { "last_name": "wang" } }}'复制代码

AND类型搜索

curl -XPOST 'localhost:9200/accounts/person/_search?pretty' -d '{  "query": {    "bool": {      "must": [        { "match": { "last_name": "wang" } },        { "match": { "first_name": "fanggang" } }      ]    }  }}'复制代码

OR类型搜索

curl -XPOST 'localhost:9200/accounts/person/_search?pretty' -d '{  "query": {    "bool": {      "should": [        { "match": { "last_name": "wang" } },        { "match": { "sex": "male" } }      ]    }  }}'复制代码

排除类型搜索

curl -XPOST 'localhost:9200/accounts/person/_search?pretty' -d '{  "query": {    "bool": {      "must_not": [        { "match": { "last_name": "wang" } },        { "match": { "last_name": "yue" } },        { "match": { "last_name": "kan" } }      ]    }  }}'复制代码

复杂查询(多搜索条件)

curl -XPOST 'localhost:9200/accounts/person/_search?pretty' -d '{  "query": {    "bool": {      "must": [        { "match": { "last_name": "wang" } }      ],      "must_not": [        { "match": { "first_name": "bob" } }      ]    }  }}'复制代码

过滤查询

查询年龄在32 - 35岁之间的人。

curl -XPOST 'localhost:9200/accounts/person/_search?pretty' -d '{  "query": {    "bool": {      "must": { "match_all": {} },      "filter": {        "range": {          "age": {            "gte": 32,            "lte": 35          }        }      }    }  }}'复制代码

聚合查询

Count ... group by类型聚合查询

curl -XPOST 'localhost:9200/accounts/person/_search?pretty' -d '{  "size": 0,  "aggs": {    "group_by_city": {      "terms": {        "field": "city"      }    }  }}'复制代码

由于size设置为0,它并没有返回文档的信息,只是返回了聚合的结果。

统计平均年龄

curl -XPOST 'localhost:9200/accounts/person/_search?pretty' -d '{  "size": 0,  "aggs": {    "group_by_city": {      "terms": {        "field": "city"      },      "aggs": {        "average_age": {          "avg": {            "field": "age"          }        }      }    }  }}'复制代码

结果如下:

嵌套聚合查询(范围分组、统计平均值)

例如:先按年龄范围分组,再统计不同地域的平均年龄:

curl -XPOST 'localhost:9200/accounts/person/_search?pretty' -d '{  "size": 0,  "aggs": {    "group_by_age": {      "range": {        "field": "age",        "ranges": [          {            "from": 20,            "to": 30          },          {            "from": 31,            "to": 40          }        ]      },      "aggs": {        "group_by_city": {          "terms": {            "field": "city"          },          "aggs": {            "average_age": {              "avg": {                "field": "age"              }            }          }        }      }    }  }}'复制代码

结果如下:

{  "took" : 8,  "timed_out" : false,  "_shards" : {    "total" : 5,    "successful" : 5,    "failed" : 0  },  "hits" : {    "total" : 5,    "max_score" : 0.0,    "hits" : [ ]  },  "aggregations" : {    "group_by_age" : {      "buckets" : [        {          "key" : "20.0-30.0",          "from" : 20.0,          "to" : 30.0,          "doc_count" : 1,          "group_by_city" : {            "doc_count_error_upper_bound" : 0,            "sum_other_doc_count" : 0,            "buckets" : [              {                "key" : "shanghai",                "doc_count" : 1,                "average_age" : {                  "value" : 29.0                }              }            ]          }        },        {          "key" : "31.0-40.0",          "from" : 31.0,          "to" : 40.0,          "doc_count" : 2,          "group_by_city" : {            "doc_count_error_upper_bound" : 0,            "sum_other_doc_count" : 0,            "buckets" : [              {                "key" : "hangzhou",                "doc_count" : 2,                "average_age" : {                  "value" : 34.5                }              }            ]          }        }      ]    }  }}复制代码

以上是ElasticSearch一些基本操作,本文档后续会持续更新,敬请关注。

转载地址:http://xyblo.baihongyu.com/

你可能感兴趣的文章
Linux 虚拟化实践之KVM
查看>>
DigitalOcean的旅程:从被TechStars拒绝走向云托管服务宠儿
查看>>
脚踏编程及接线方法
查看>>
Linux第三周作业
查看>>
Python内置数据结构3
查看>>
五、性能监视(2)Windows性能日志
查看>>
PowerShell在Exchange2010下快速开启邮箱[续]
查看>>
volatile关键字
查看>>
创建和销毁对象
查看>>
我的友情链接
查看>>
yum库搭建及安装实例(包含源码编译安装)
查看>>
 CentOS 6系统中/boot恢复被删除的/boot分区 简单介绍
查看>>
rsyync 文件备份简单尝试
查看>>
耦合度和console类的属性和方法
查看>>
中秋有点孤独
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
android Flag介绍
查看>>
个推如何管理亿级代码的质量?持续集成SonarQube 代码质量管理系统
查看>>
安装tomcat出现问题:failed to install tomcat6 service
查看>>