详解 ElasticSearch 基础教程

 分享 ElasticSearch 基础,请指教。
 
 如你对技术也感兴趣,欢迎交流。
 
  如有对阁下帮助,请点赞收藏‍分享

理论

Elasticsearch: The Official Distributed Search & Analytics Engine | ElasticElasticsearch is the leading distributed, RESTful, free and open search and analytics engine designed for speed, horizontal scalability, reliability, and easy management. Get started for free.icon-default.png?t=N7T8https://www.elastic.co/elasticsearch/

        Elasticsearch是基于Apache Lucene的搜索服务器它的最新版本是8.10.2。

        Elasticsearch是一个实时的分布式开放源代码全文本搜索和分析引擎。可从RESTful Web服务界面访问它,并使用无模式的JSON(JavaScript对象表示法)文档存储数据。它基于Java编程语言构建,因此Elasticsearch可以在不同平台上运行。它使用户能够以很高的速度浏览大量的数据。

Elasticsearch & MYSQL 

详解 ElasticSearch 基础教程_第1张图片

索引 

 对比关系型数据库,创建索引就等同于创建数据库

创建 

PUT /shopping
HTTP 的 PUT 请求

 详解 ElasticSearch 基础教程_第2张图片

查看

 单个索引 

GET /shopping
详解 ElasticSearch 基础教程_第3张图片 HTTP 的 GET 请求

全部索引 

GET /_cat/indices?v
HTTP 的 GET 请求

删除 

DELETE /shopping
HTTP 的 DELETE 请求

 文档

创建

 随机ID

POST /shopping/_doc
{
  "title":"华为meta60pro",
  "category":"手机",
  "images":"https://www.gulixueyuan.com/xm.jpg",
  "price":"6499.00"
}

详解 ElasticSearch 基础教程_第4张图片 自定义ID

POST /shopping/_doc/1000
{
  "title":"华为meta60pro max",
  "category":"手机",
  "images":"https://www.gulixueyuan.com/xm.jpg",
  "price":"7499.00"
}

PUT /shopping/_doc/1002
{
  "title":"华为meta60pro max尊享",
  "category":"手机",
  "images":"https://www.gulixueyuan.com/xm.jpg",
  "price":"8499.00"
}

详解 ElasticSearch 基础教程_第5张图片 

查询

 主键查询

详解 ElasticSearch 基础教程_第6张图片 不存在查询

详解 ElasticSearch 基础教程_第7张图片

全部查询

GET /shopping/_search

详解 ElasticSearch 基础教程_第8张图片

修改

全量更新 

PUT /shopping/_doc/1002
{
  "title":"华为meta60pro max尊享",
  "category":"手机",
  "images":"https://www.gulixueyuan.com/xm.jpg",
  "price":"12999.00"
}
详解 ElasticSearch 基础教程_第9张图片 修改

 

详解 ElasticSearch 基础教程_第10张图片 修改后

 局部更新

POST /shopping/_update/1002
{
  "doc":{
    "title":"华为meta70pro max尊享"
  }
}

详解 ElasticSearch 基础教程_第11张图片

详解 ElasticSearch 基础教程_第12张图片 删除

DELETE /shopping/_doc/1000

详解 ElasticSearch 基础教程_第13张图片 

复杂查询

请求路径方式

GET /shopping/_search?q=category:手机

详解 ElasticSearch 基础教程_第14张图片 请求体方式

属性查询 
GET /shopping/_search
{
  "query":{
    "match": {
      "category": "手机"
    }
  }
}
详解 ElasticSearch 基础教程_第15张图片 全量查询
GET /shopping/_search
{
  "query":{
    "match_all": {}
  }
}

详解 ElasticSearch 基础教程_第16张图片

分页查询 
GET /shopping/_search
{
  "query":{
    "match_all": {}
  },
  "from": 1,
  "size": 2
}

详解 ElasticSearch 基础教程_第17张图片

指定返回属性
GET /shopping/_search
{
  "query":{
    "match_all": {}
  },
  "from": 1,
  "size": 2,
  "_source": ["price","title"]
}
详解 ElasticSearch 基础教程_第18张图片 排序
GET /shopping/_search
{
  "query":{
    "match_all": {}
  },
  "from": 1,
  "size": 2,
  "_source": ["title"],
  "sort": [
    {
      "title": {
        "order": "desc"
      }
    }
  ]
}

错误

详解 ElasticSearch 基础教程_第19张图片

# 设置属性类型
PUT shopping/_mapping
{
    "properties": {
      "price": {
        "type": "text"
      },
      "title": {
        "fielddata": true, 
        "type": "text"
      }
    }
}
详解 ElasticSearch 基础教程_第20张图片 查询结果

 组合查询

 同时满足所有条件

## SQL: category="手机" AND price="6499.00"
GET /shopping/_search
{
  "query":{
    "bool": {
      "must": [
        {
          "match": {
          "category": "手机"
        }
        },
        {
          "match": {
            "price": "6499.00"
          }
        }
      ]
    }
  }
}

详解 ElasticSearch 基础教程_第21张图片

满足某个条件

## SQL: category="手机" OR price="6499.00" 
GET /shopping/_search
{
  "query":{
    "bool": {
      "should": [
        {
          "match": {
          "category": "手机"
        }
        },
        {
          "match": {
            "price": "6499.00"
          }
        }
      ]
    }
  }
}

详解 ElasticSearch 基础教程_第22张图片 

范围查询

## SQL: (category="手机" OR price=6499.00) and (price between 6500 and 10000) 
GET /shopping/_search
{
  "query":{
    "bool": {
      "should": [
        {
          "match": {
          "category": "手机"
        }
        },
        {
          "match": {
            "price": 6499.00
          }
        }
      ],
      "filter": {
        "range": {
          "price": {
            "gt": 6500,
            "lt": 10000
          }
        }
      }
    }
  }
}

详解 ElasticSearch 基础教程_第23张图片

分页排序

# SQL: (category="手机" OR price=6499.00) and (price between 6500 and 10000)  limit 2 order by price desc
GET /shopping/_search
{
  "query":{
    "bool": {
      "should": [
        {
          "match": {
          "category": "手机"
        }
        },
        {
          "match": {
            "price": 6499.00
          }
        }
      ],
      "filter": {
        "range": {
          "price": {
            "gt": 6500,
            "lt": 10000
          }
        }
      }
    }
  },
  "from": 0,
  "size": 2,
  "sort": [
      {
      "price": {
        "order": "desc"
      }
    }
  ]
}

详解 ElasticSearch 基础教程_第24张图片 高亮显示

GET /shopping/_search
{
  "query":{
    "match_phrase": {
      "category": "手机"
    }
  },
  "highlight": {
    "fields": {
      "category": {}
    }
  }
}

详解 ElasticSearch 基础教程_第25张图片

聚合查询 

分组聚合 


GET /shopping/_search
{
 "aggs": {
   "cacl_avg": {
     "terms": {
       "field":"price"
     }
   }
 },
 "size": 0
}

详解 ElasticSearch 基础教程_第26张图片 计算平均值


GET /shopping/_search
{
 "aggs": {
   "cacl_avg": {
     "avg": {
       "field":"price"
     }
   }
 },
 "size": 0
}

 

详解 ElasticSearch 基础教程_第27张图片 

创建映射关系

映射关系 


PUT /user/_mapping
{
  "properties": {
    "user":{
      "type": "text",
      "index": true
    },
    "sex":{
      "type": "keyword",
      "index": false
    },
    "tel":{
      "type": "keyword",
      "index": true
    }
  }
}

详解 ElasticSearch 基础教程_第28张图片

 

数据 

详解 ElasticSearch 基础教程_第29张图片

分词查询(type=text)

详解 ElasticSearch 基础教程_第30张图片

关键字查询 (type=keyword)

详解 ElasticSearch 基础教程_第31张图片

未被索引,不允许查询 

详解 ElasticSearch 基础教程_第32张图片 

 总结

type=text ,index=true 时,可分词可查询;

type=keyword ,index=true 时,不可分词可查询;

index=false 时,不可查询

你可能感兴趣的:(数据库,elasticsearch,大数据,搜索引擎)