ES基础使用

文章来自
Elasticsearch操作索引

前提

  • 下载好Kibana,在Kibana打开后的页面里输入下面的内容进行测试,实际上Kibana的测试功能就是一个postman,但是比postman强大得多的是,可视化的数据分析,图标分析等等

image.png

ES的数据结构
索引(indices)------Databases 表
文档(Document)--------Row 行
字段(Field)----Columns 列

基础使用

// 新增数据
POST /heima/goods/
{
    "title":"小米手机",
    "images":"http://image.leyou.com/12479122.jpg",
    "price":2699.00
}

// 查看数据
GET /heima/_search
{
    "query":{
        "match_all": {}
    }
}
// 查看数据的返回结果,id是随机生成的
{
  "_index": "heima",
  "_type": "goods",
  "_id": "r9c1KGMBIhaxtY5rlRKv",
  "_version": 1,
  "_score": 1,
  "_source": {
    "title": "小米手机",
    "images": "http://image.leyou.com/12479122.jpg",
    "price": 2699
  }
}

// 查看数据库结构
GET /heima/_mapping
{
  "heima": {
    "mappings": {
      "goods": {
        "properties": {
          "images": {
            "type": "keyword",
            "index": false
          },
          "price": {
            "type": "float"
          },
          "title": {
            "type": "text",
            "analyzer": "ik_max_word"
          }
        }
      }
    }
  }
}

// 自定义id存入
POST /heima/goods/2
{
    "title":"大米手机",
    "images":"http://image.leyou.com/12479122.jpg",
    "price":2899.00
}

// 以id的方式再次存入就是修改,随机id需要先获取id
POST /heima/goods/2
{
    "title":"小米手机",
    "images":"http://image.leyou.com/12479122.jpg",
    "price":1899.00
}

// 删除数据
DELETE /索引库名/类型名/id值

// 模糊搜索,会使用分词
GET /heima/_search
{
    "query":{
        "match":{
            "title":"小米电视"
        }
    }
}

// 模糊搜索,不使用
GET /heima/_search
{
    "query":{
        "match": {
          "title": {
            "query": "小米电视",
            "operator": "and"
          }
        }
    }
}

// 组合查询
GET /heima/_search
{
    "query":{
        "multi_match": {
            "query":    "小米",
            "fields":   [ "title", "subTitle" ]
        }
	}
}

// 多词条精确匹配
GET /heima/_search
{
    "query":{
        "terms":{
            "price":[2699.00,2899.00,3899.00]
        }
    }
}

// 只要指定的字段就行
GET /heima/_search
{
  "_source": {
    "includes":["title","price"]
  },
  "query": {
    "term": {
      "price": 2699
    }
  }
}

// 排除这个字段
GET /heima/_search
{
  "_source": {
     "excludes": ["images"]
  },
  "query": {
    "term": {
      "price": 2699
    }
  }
}

高级查询

// 过滤
GET /heima/_search
{
    "query":{
        "constant_score":   {
            "filter": {
            	 "range":{"price":{"gt":2000.00,"lt":3000.00}}
            }
        }
}

// 排序
GET /heima/_search
{
  "query": {
    "match": {
      "title": "小米手机"
    }
  },
  "sort": [
    {
      "price": {
        "order": "desc"
      }
    }
  ]
}

// 多字段排序
GET /goods/_search
{
    "query":{
        "bool":{
        	"must":{ "match": { "title": "小米手机" }},
        	"filter":{
                "range":{"price":{"gt":200000,"lt":300000}}
        	}
        }
    },
    "sort": [
      { "price": { "order": "desc" }},
      { "_score": { "order": "desc" }}
    ]
}

聚合aggregations,就是sql的分组

// 用color字段作为分组
// size: 查询条数,这里设置为0,因为我们不关心搜索到的数据,只关心聚合结果,提高效率
// aggs:声明这是一个聚合查询,是aggregations的缩写
// popular_colors:给这次聚合起一个名字,任意。
// terms:划分桶的方式,这里是根据词条划分
// field:划分桶的字段
GET /cars/_search
{
    "size" : 0,
    "aggs" : { 
        "popular_colors" : { 
            "terms" : { 
              "field" : "color"
            }
        }
    }
}

// 用颜色做分组后还要计算价格
GET /cars/_search
{
    "size" : 0,
    "aggs" : { 
        "popular_colors" : { 
            "terms" : { 
              "field" : "color"
            },
            "aggs":{
                "avg_price": { 
                   "avg": {
                      "field": "price" 
                   }
                }
            }
        }
    }
}

更多高端操作查看最上面的原文

posted @ 2020-06-07 21:32  一个年轻淫  阅读(1124)  评论(0编辑  收藏  举报