ES详细讲解

一、ES(ElasticSearch)

ES是一个基于RESTful web接口并且构建在Apache Lucene之上的开源分布式搜索引擎。

它是非关系型数据库

elasticsearch中索引  =>  mysql 表

elasticsearch中映射  =>  mysql 表结构

elasticsearch中文档  =>  mysql 行

elasticsearch中字段  =>  mysql 列

二、参加聚合的字段都有:

1.keyworld类型(文本字段的一种,用于过滤、排序、聚合和精确值)

2.数值类型(integet和float)

3.日期类型

4.布尔类型(统计true、false的数量)

注意:不能参加聚合的字段主要是text类型,它用于全文检索

三、ES聚合分为:

1.Bucket(桶)聚合:照指定的条件对数据进行分组统计,可以嵌套

2.Metric(指标)聚合:计算指标,max、min、avg、sum等(也称度量聚合:Stats同时求前四个)

3.Pipeline(管道)聚合:对聚合结果的二次聚合

ES聚合三要素:聚合名称、聚合类型、聚合字段

四、案例

1. # 查看所有的索引:GET /_cat/indices


2. # 创建索引:PUT /books  


3. # 删除索引:DELETE /books

4. #文档操作


创建文档  添加 
POST /books/_doc
{
  "title":"一只特立独行的喵",
  "type":"纸书",
  "cover":"https://img2.doubanio.com/view/subject/s/public/s1670642.jpg",
  "price":25.5
}

POST /books/_doc
{
  "title":"庆余年",
  "type":"电子书",
  "cover":"https://img2.doubanio.com/view/subject/s/public/s1670642.jpg",
  "price":85.5
}

POST /books/_doc
{
  "title":"庆家军",
  "type":"纸书",
  "cover":"https://img2.doubanio.com/view/subject/s/public/s1670642.jpg",
  "price":105.5
}


# 默认文档id是自动生成的  可以自己指定 
POST /books/_doc/a1111
{
  "title":"三体一:地球往事",
  "type":"电子书",
  "cover":"https://img2.doubanio.com/view/subject/s/public/s1670642.jpg",
  "price":100
}

5. # 查询 


# 主键查询 
GET /books/_doc/a1111

# 查询所有 
GET 形式查询所有: GET /books/_search

POST 形式查询所有:

POST /books/_search
{
  "query": {
    "match_all": {}
  }
}

# 修改 
# 全量修改  写死了 
POST /books/_doc/a1111
{
  "title" : "三体一:地球往事2",
  "type":"电子书",
  "cover":"https://img2.doubanio.com/view/subject/s/public/s1670642.jpg",
  "price":100
}

# 局部修改
POST /books/_update/a1111
{
  "doc": {
     "title" : "三体一:地球往事"
  }
}

# 删除  逻辑删除  
DELETE /books/_doc/a1111

# 查询  【搜索】
POST /books/_search
{
  "query": {
    "match": {
      "title": "三体一"
    }
  }
}

# 全量查询并且指定字段返回
POST /books/_search
{
  "query": {
    "match_all": {}
  },
  "_source": ["title", "price"]
}

# 分页查询
# mysql  limit
# limit 5 -> 展示前五条数据
# limit offset , 4    offset 跳过几条数据   
# limit (pageNum-1)*pageSize, pageSize
# ES 分页 
#  from:  跳过几条数据
#  size: 每页展示多少条 
POST /books/_search
{
  "query": {
    "match_all": {}
  },
  "from": 2,
  "size": 2
}


# 排序
POST /books/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "price": {
        "order": "desc"
      }
    }
  ]
}

# 查询电子书并且价格为100的
POST /books/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "type": "电子书"
          }
        },
        {
          "match": {
            "price": "100"
          }
        }
      ]
    }
  }
}

# 多条件范围查询 [数字]
POST /books/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "title": "一"
          }
        }
      ],
      "filter": [
        {
          "range": {
            "price": {
              "gte": 10,
              "lte": 100
            }
          }
        }
      ]
    }
  }
}

#  完全匹配检索  模糊
POST /books/_search
{
  "query": {
    "match_phrase": {
      "title": "体一"
    }
  }
}

# 高亮查询
POST /books/_search
{
  "query": {
    "match": {
      "title": "三体一"
    }
  },
  "highlight": {
    "fields": {"title": {}},
    "pre_tags": ["<span style=\"color:red;\">"],
    "post_tags": ["</span>"]
  }
}

#  聚合查询
# NAME  指定聚合查询的名称 随意编写 
# AGG_TYPE 聚合类型  max  min  sum  avg count ... 
POST /books/_search
{
  "size": 0, 
  "aggs": {
    "max_price": {
      "avg": {
        "field": "price"
      }
    }
  }
}

POST /books/_search
{
  "size": 0,
  "aggs": {
    "price_count": {
      "terms": {
        "field": "price"
      }
    }
  }
}


# 创建 商品索引的 映射 
PUT /goods
{
  "mappings": {
    "properties": {
      "goodsName": {
        "type": "text"
      },
      "price": {
        "type": "double",
        "index": false
      },
      "type": {
        "type": "keyword"
      }
    }
  }
}


GET /goods/_search

POST /goods/_doc
{
  "goodsName": "华为手机",
  "price": 1888.88,
  "type": "电子产品"
}

POST /goods/_doc
{
  "goodsName": "华为手机",
  "price": 1888.88,
  "type": "电子产品",
  "age": 10
}

POST /goods/_search
{
  "query": {
    "match": {
      "type": "电子产品"
    }
  }
}

五、创建映射

PUT /goods
{
  "mappings": {
    "properties": {
      "goodsName": {
        "type": "text",
        "analyzer": "ik_max_word",
        "search_analyzer": "ik_max_word"
      },
      "goodsNum": {
        "type": "integer"
      },
      "goodsTime": {
        "type": "long"
      },
      "goodsPrice": {
        "type": "double"
      },
      "goodsStatus":{
        "type": "integer"
      },
      "goodsPhoto":{
        "type": "keyword"
      },
      "typeId": {
        "type": "integer"
      },
      "typeName": {
        "type": "keyword",
        "index": false
      },
      "createBy":{
        "type": "long"
      }
    }
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值