您当前的位置: 首页 >  restful

java持续实践

暂无认证

  • 2浏览

    0关注

    746博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

java持续实践 发布时间:2019-01-20 11:45:27 ,浏览量:2

文章目录
      • 添加索引库
      • 创建文档
      • 查询文档
        • 查询所有文档
        • 根据id查询文档
        • 条件查询
        • 模糊查询
      • 修改文档
        • 关于修改的特殊情况
      • 删除文档
      • 关于数据库的优化

添加索引库

添加索引库发送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框架教程"
}

响应的数据如下

{
    "_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 响应的数据如下图

条件查询

查询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项目教程"
}

响应的数据如下

{
    "_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 响应的数据如下

{
    "_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
    }
}

关于数据库的优化

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

关注
打赏
1658054974
查看更多评论
立即登录/注册

微信扫码登录

0.0427s