美文网首页ElasticSearch学习笔记
ElasticSearch第4天 在项目中使用Elasticse

ElasticSearch第4天 在项目中使用Elasticse

作者: 赵旻峰 | 来源:发表于2021-10-21 17:19 被阅读0次

今日目标

在项目中使用Elasticsearch-PHP的API

项目:用户管理系统

现在有一个项目是做一个用户管理系统,要求可以对用户的信息实现增删改查,用户的信息包括
<姓名(name),性别(sex),年龄(age),身份证号(idcard)>

元数据数据字典

_index:info_manager
_type : user
_id:自动生成

插入用户

$data = [
            'name' => $request->name,
            'sex' => $request->sex,
            'age' => $request->age,
            'idcard' => $request->idcard,
            'created_at' => date('Y-m-d H:i:s', time()),
            'updated_at' => date('Y-m-d H:i:s', time()),
        ];

        $params = [
            'index' => $this->index,
            'type' => $this->type,
            'body' => $data,
        ];

        $exists = app('es')->search([
            'index' => $this->index,
            'type' => $this->type,
            'body' => [
                'query' => [
                    'match' => [
                        'idcard' => $request->idcard,
                    ],
                ],
            ],
        ]);
        if ($exists['hits']['hits']) {
            return '已经存在该用户';
        }

        $response = app('es')->index($params);

        if ($response['result'] == 'created') {
            return '创建成功';
        }

        return '创建失败';
}

查找姓名为“张三”的用户

    public function get(Request $request)
    {
        $exists = app('es')->search([
            'index' => $this->index,
            'type' => $this->type,
            'body' => [
                'query' => [
                    'match' => [
                        'name' => $request->name,
                        //'idcard' => $request->idcard,
                    ],
                ],
            ],
        ]);
        if ($exists['hits']['hits']) {
            return $exists['hits']['hits'];
        }

        return  '不存在该用户';
    }
  • 响应
[
    {
        "_index": "info_manager",
        "_type": "user",
        "_id": "SBQ5qHwBQ6qKqx4bjNy_",
        "_score": 4.60517,
        "_source": {
            "name": "张三",
            "sex": "男",
            "age": "28",
            "idcard": "61062164545212444121221",
            "created_at": "2021-10-22 13:38:36",
            "updated_at": "2021-10-22 13:38:36"
        }
    }
]

修改id为xx的用户年龄

    public function update(Request $request)
    {
        $exists = app('es')->exists([
            'index' => $this->index,
            'type' => $this->type,
            'id' => $request->id,
        ]);

        if ($exists) {
            $response = app('es')->update([
                'index' => $this->index,
                'type' => $this->type,
                'id' => $request->id,
                'body' => [
                    'doc' => [
                        'age' => $request->age,
                    ],
                ],
            ]);

            return  $response;
        }

        return '资源不存在';
    }

列出所有用户

public function list(Request $request)
    {
        $params = [
            'index' => $this->index,
            'type' => $this->type,
        ];

        $response = app('es')->search();

        return $response['hits']['hits'];
    }

删除id为xx的用户

    public function del(Request $request)
    {
        $params = [
            'index' => $this->index,
            'type' => $this->type,
            'id' => $request->id,
        ];

        $response = app('es')->delete($params);

        return $response;
    }

明日计划

进一步学习在项目中使用es实现一些较复杂的功能,分页查询,统计等

总结

项目中是可以用ES实现数据库的各种操作,但感觉对比数据库的使用,好像稍微有些麻烦,比如每次需要去指定index和type,这个可以通过封装去实现,或者去使用其他封装好的,更贴近数据库使用习惯的插件去使用

相关文章

网友评论

    本文标题:ElasticSearch第4天 在项目中使用Elasticse

    本文链接:https://www.haomeiwen.com/subject/qdgfaltx.html