黑马十次方项目day04-04之restful风格操作es

添加索引库

添加索引库发送put请求. 在http://localhost:9200后面加上你想要的索引库的名称即可
例如添加索引库名为tensquare_elasticsearch
http://localhost:9200/tensquare_elasticsearch
响应数据如下

{
    "acknowledged": true,
    "shards_acknowledged": true,
    "index": "tensquare_elasticsearch"
}

创建文档

创建文档时,先需要有类型,只需在创建文档时,把路径后面加上文档名称就行.
发送post请求,请求体中用json数据,来传递文档的参数,
在索引库tensquare_elasticsearch中,创建article类型的文档
http://localhost:9200/tensquare_elasticsearch/article
文档的内容为

{
"title":"spring教程",
"content":"spring框架教程"
}

黑马十次方项目day04-04之restful风格操作es
响应的数据如下

{
    "_index": "tensquare_elasticsearch",
    "_type": "article",
    "_id": "AWhpMrWB71TIQ56XPqYw",
    "_version": 1,
    "result": "created",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "created": true
}

created为true和"result": "created"代表是创建的操作.
_id为自动生成的数据.

查询文档

查询所有文档

get请求查询所有
http://localhost:9200/tensquare_elasticsearch/article/_search
返回如下的json数据

{
    "took": 1685,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 1,
        "max_score": 1,
        "hits": [
            {
                "_index": "tensquare_elasticsearch",
                "_type": "article",
                "_id": "AWhpMrWB71TIQ56XPqYw",
                "_score": 1,
                "_source": {
                    "title": "spring教程",
                    "content": "spring框架教程"
                }
            }
        ]
    }
}

根据id查询文档

发送get请求,请求路径的最后一位为文档的id
http://localhost:9200/tensquare_elasticsearch/article/1
响应的数据如下图
黑马十次方项目day04-04之restful风格操作es

条件查询

查询title为spring教程的文档.
发送如下的get请求
在_search?q后面进行条件参数的拼接
http://localhost:9200/tensquare_elasticsearch/article/_search?q=title:spring教程
响应的数据如下


{
    "took": 2,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 2,
        "max_score": 0.7594807,
        "hits": [
            {
                "_index": "tensquare_elasticsearch",
                "_type": "article",
                "_id": "AWhpMrWB71TIQ56XPqYw",
                "_score": 0.7594807,
                "_source": {
                    "title": "spring教程",
                    "content": "spring项目教程"
                }
            },
            {
                "_index": "tensquare_elasticsearch",
                "_type": "article",
                "_id": "1",
                "_score": 0.7594807,
                "_source": {
                    "title": "spring教程",
                    "content": "spring框架教程"
                }
            }
        ]
    }
}

模糊查询

发送 如下的get请求,
http://localhost:9200/tensquare_elasticsearch/article/_search?q=title:s
得到的响应如下

{
    "took": 2,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 0,
        "max_score": null,
        "hits": []
    }
}

可以看到默认的是匹配查询, 匹配title中,有没有词条为s的文档.
而在英文中,是一个单词一个词条,没有字母为s的词条,因此就查询不到数据了.
在中文中,如果不用中文的分词器,默认的是一个汉字一个词条.

模糊查询,在搜索的关键词前后加上* ,即为模糊查询
发送如下的get请求
http://localhost:9200/tensquare_elasticsearch/article/_search?q=title:*s*
响应的数据如下. 模糊查询是可以匹配到数据的.

{
    "took": 8,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 2,
        "max_score": 1,
        "hits": [
            {
                "_index": "tensquare_elasticsearch",
                "_type": "article",
                "_id": "AWhpMrWB71TIQ56XPqYw",
                "_score": 1,
                "_source": {
                    "title": "spring教程",
                    "content": "spring项目教程"
                }
            },
            {
                "_index": "tensquare_elasticsearch",
                "_type": "article",
                "_id": "1",
                "_score": 1,
                "_source": {
                    "title": "spring教程",
                    "content": "spring框架教程"
                }
            }
        ]
    }
}

修改文档

修改文档为put请求,请求路径上要拼接上要修改的文档的id
例如此处要修改的文档的id为AWhpMrWB71TIQ56XPqYw
http://localhost:9200/tensquare_elasticsearch/article/AWhpMrWB71TIQ56XPqYw
在请求体中要带上修改的文档的json数据

{
"title":"spring教程",
"content":"spring项目教程"
}

黑马十次方项目day04-04之restful风格操作es
响应的数据如下

{
    "_index": "tensquare_elasticsearch",
    "_type": "article",
    "_id": "AWhpMrWB71TIQ56XPqYw",
    "_version": 2,
    "result": "updated",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "created": false
}

“created”: false 代表不是新增的操作
“result”: “updated”, 代表是更新的操作
“_version”: 2, 代表为第二个版本

关于修改的特殊情况

如果在修改的请求中,路径带上的id,在索引库中并不存在,那么会直接创建该请求路径上的id
例如发送put请求,路径带上1,此时索引库中是没有id为1的索引的
http://localhost:9200/tensquare_elasticsearch/article/1
黑马十次方项目day04-04之restful风格操作es
响应的数据如下

{
    "_index": "tensquare_elasticsearch",
    "_type": "article",
    "_id": "1",
    "_version": 1,
    "result": "created",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "created": true
}

响应了created": true,代表是新增的操作, 并且id直接为1.

删除文档

发送delete请求
http://localhost:9200/tensquare_elasticsearch/article/1
路径的最后面为删除文档的id
响应的数据如下

{
    "found": true,
    "_index": "tensquare_elasticsearch",
    "_type": "article",
    "_id": "1",
    "_version": 3,
    "result": "deleted",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    }
}

关于数据库的优化

数据库的优化, 可以创建索引.
主键和唯一约束的列,会自动创建索引.
创建索引是双刃剑, 因为有索引,查询会快速,但是增删改会慢.
因为索引的底层为二叉树, 每次进行增删改,都会对树的结构进行调整,
非常的影响性能.
但是对查询来说,建立索引,会提供查询的速度.