Elasticsearch

参考教程:
https://www.bilibili.com/vide...
https://gitee.com/moxi159753/...
官方文档:
https://www.elastic.co/guide/...

基本概念

  • 索引(index):对逻辑数据的逻辑存储,可以理解为mysql的表
  • 文档(document):主要实体,可以理解为mysql的一行记录
  • 映射(mapping):文档的属性,字段,每个字段的数据类型
  • 文档类型:一个索引可以有多个类型;同一索引中,同一属性文档类型必须相同。

RESTful API

创建索引
PUT /haoke
{
    "settings": {
        "index": {
        "number_of_shards": "2", #分片数
        "number_of_replicas": "0" #副本数
        }
    }
}
删除索引
DELETE /{索引}
不需要额外的参数
插入数据
URL规则: POST /{索引}/{类型}/{id(非必填)}
POST /haoke/user/
{
    "id": 1,
    "name": "test"
}

image.png
_id为唯一标识符,id为参数

更新数据
ES中文档数据不能修改,只能覆盖更新(全量)
PUT /{索引}/{类型}/{id}
{
    "id": 1,
    "name": "test2"
}
局部更新
ES中文档数据不能修改,只能覆盖更新(全量)
POST /{索引}/{类型}/{id}/_update
{
    "doc":{
        "name": "test3"
    }
}
删除数据
DELETE /{索引}/{类型}/{id}
不需要额外的参数
搜索数据
根据ID搜索
GET /{索引}/{类型}/{id}
不需要额外的参数
搜索全部数据
GET /{索引}/{类型}/_search
不需要额外的参数
关键字搜索
GET /{索引}/{类型}/_search?q={字段}:{值}
不需要额外的参数
DSL查询
POST /{索引}/{类型}/_search
例1:查询30岁的用户
{
    "query" : {
        "match" : { 
            "age" : 30
        }
    }
}

例2:查询大于等于30岁,名字为test的用户

{
    "query": {
        "bool": {
            "filter": {
                    "range": {
                        "age": {
                        "gte": 30
                    }
                }
            },
            "must": {
                "match": {
                    "name": "test"
                }
            }
        }
    }
}
全文搜索
POST /{索引}/{类型}/_search
{
    "query": {
        "match": {
            "name": "test"
        }
    }
}
结果高亮显示
POST /{索引}/{类型}/_search
{
    "query": {
        "match": {
            "name": "test"
        }
    },
    "highlight": {
        "fields": {
            "name": {}
        }
    }
}
聚合
类似mysql的group by操作
{
    "aggs": {
        "all_interests": {
            "terms": {
                "field": "age"
            }
        }
    }
}

IT小马
1.2k 声望166 粉丝

Php - Go - Vue - 云原生