zoukankan      html  css  js  c++  java
  • Elasticsearch 学习 3. Elasticsearch基本概念、RESTful API

    3.1. 索引

    索引(index)是 Elasticsearch对逻辑数据的逻辑存储,所以它可以分为更小的部分。

    可以把索引看成关系型数据库的表,索引的结构是为快速有效的全文索引准备的,特别是它不存储原始值。

    Elasticsearch可以把索引放在一台机器或者分散在多台服务器上,每一个索引有一个或者多个分片(shard),每个分片可以有多个副本(replica)。

    3.2. 文档

    存储在Elasticsearch中的主要实体叫做 文档(document)。用关系型数据库来类比的话,一个文档相当于数据库表中的一行记录。

    Elasticsearch和MongoDB中的文档类似,都可以有不同的结构,但是Elasticsearch中的文档,相同的字段必须有相同的类型。

    文档由多个字段组成,每个字段可能多次出现在一个文档里,这样的字段叫多指字段(multivalued)。

    每个字段的类型,可以是文本、数值、日期等。字段类型也可以是复杂类型,一个字段包含其他子文档或者数组。

    3.3. 映射

    所有文档写进索引之前都会进行分析,如何将输入的文本分割为字条,哪些字条又会被过滤,这种行为叫映射(mapping)。一般由用户自定义规则。

        文档类型

    在Elasticsearch中,一个索引对象可以存储很多不同用途的对象。例如,一个博客应用程序可以保存文章和评论

    每个文档有不同的接口。

    不同的文档类型不能为相同的属性设置不同的类型。例如,在同一个索引中的所有文档类型中,一个叫title的字段必须具有相同的类型。

    3.4  RESTful API 

    在Elasticsearch 中,提供了功能丰富的RESTful API的操作,包括基本的CURD,创建索引,删除索引操作。

    3.4.1 创建非结构化索引

    在Lucene中,创建索引是需要定义字段名称以及字段的类型的,在Elasticsearch中提供了非结构化的索引,就是不

    需要创建索引结构,即可写入数据到索引中,实际上在Elasticsearch底层会进行结构化操作,此操作对用户是透明 的。
     
     
    创建索引:
    put /haoke
    
    {
    	"settings": {
    		"index":{
    			"number_of_shards":"2",#分片数
    			"number_of_replicas":"2"#副本数
    		}
    	}
    }

    创建成功

     
     
    删除索引:
    #删除索引 
    
    DELETE /haoke 
    
    {
    	"acknowledged": true
    }

    ​创

    3.5  保存数据

    # URL 规则 POST /{索引}/{类型}/{id}
    
    POST haoke/user/1001
    
    {
    	"id":1001,
    	"name":"张三",
    	"age":24,
    	"sex":"男"
    }
    
    # 响应
    {
        "_index": "haoke",
        "_type": "user",
        "_id": "1001",
        "_version": 1,
        "result": "created",
        "_shards": {
            "total": 3,
            "successful": 1,
            "failed": 0
        },
        "_seq_no": 0,
        "_primary_term": 1
    } 

    说明:非结构化的索引,不需要事先创建,直接插入数据默认创建索引。

    不指定id插入数据:

    # POST hoake/user
    {
    	"name":"王五",
    	"age":20,
    	"sex":"女"
    }

    响应

    {
        "_index": "haoke",
        "_type": "user",
        "_id": "LgOccnEBK3PERGtN9-n7",
        "_version": 1,
        "result": "created",
        "_shards": {
            "total": 3,
            "successful": 1,
            "failed": 0
        },
        "_seq_no": 0,
        "_primary_term": 1
    }

    自动生成id :  "_id": "LgOccnEBK3PERGtN9-n7"

    3.6  修改数据

           在 elasticsearch 中,文档型数据是不会修改的,但是可以通过覆盖的方式进行更新。

    在已有的数据中:将id为1001 的 name 改为 李四,age 改为30,sex 改为 女

    PUT /haoke/user/1001
    
    {
    	"id": 1001,
    	"name": "张三",
    	"age": 30,
    	"sex": "女"
    }

    返回结果:

    此时,数据修改(覆盖成功)

    现在还有一个问题,可以实现局部更新吗?-- 可以的

    上面不是说文档型数据不支持更新吗?其实是这样的:

    在内部依然会查询到这个数据,然后进行覆盖操作,步骤如下:

    1).从旧文档中检索数据JSON

    2) .  修改它

    3) .  删除旧文档

    4) .  索引新文档

    示例:

    POST  haoke/user/1001/_update
    
    #请求参数
    {
    	"doc":{
    		"age":40
    	}
    }

    此时数据局部更新成功

    3.7 删除数据

     删除数据时,只需要发起 DELETE 请求即可

    http://localhost:9200/haoke/user/1001/
    
    返回参数:
    
    {
        "_index": "haoke",
        "_type": "user",
        "_id": "1001",
        "_version": 4,
        "result": "deleted",
        "_shards": {
            "total": 3,
            "successful": 1,
            "failed": 0
        },
        "_seq_no": 3,
        "_primary_term": 1
    }
    
    # version + 1
    
    # result : 表示已经删除

     如果删除一条不存在的数据,则会响应404;

    说明:

    删除一个文档也不会立即从磁盘上移除,它只是被标记成已删除。Elasticsearch将会在你之后添加更多索引的 时候才会在后台进行删除内容的清理

    3.8 搜索数据

    示例:根据id搜索数据

    #请求参数  GET /haoke/user/LgOccnEBK3PERGtN9-n7
    
    返回数据:
    {
        "_index": "haoke",
        "_type": "user",
        "_id": "LgOccnEBK3PERGtN9-n7",
        "_version": 1,
        "_seq_no": 0,
        "_primary_term": 1,
        "found": true,
        "_source": {        #原始数据
            "name": "王五",
            "age": 20,
            "sex": "女"
        }
    }

    示例:查询所有数据

    # 请求参数  GET /haoke/user/_search
    
    返回参数:
    {
        "took": 2,
        "timed_out": false,
        "_shards": {
            "total": 2,
            "successful": 2,
            "skipped": 0,
            "failed": 0
        },
        "hits": {
            "total": {
                "value": 1,
                "relation": "eq"
            },
            "max_score": 1,
            "hits": [
                {
                    "_index": "haoke",
                    "_type": "user",
                    "_id": "LgOccnEBK3PERGtN9-n7",
                    "_score": 1,
                    "_source": {
                        "name": "王五",
                        "age": 20,
                        "sex": "女"
                    }
                }
            ]
        }
    }

    示例:关键字查询,查询年龄等于30的用户

    原始数据

    传参

    http://localhost:9200/haoke/user/_search?q=age:20

    结果: 检索出 age=20 的两个人,王五和李四

    {
        "took": 40,
        "timed_out": false,
        "_shards": {
            "total": 2,
            "successful": 2,
            "skipped": 0,
            "failed": 0
        },
        "hits": {
            "total": {
                "value": 2,
                "relation": "eq"
            },
            "max_score": 1,
            "hits": [
                {
                    "_index": "haoke",
                    "_type": "user",
                    "_id": "LgOccnEBK3PERGtN9-n7",
                    "_score": 1,
                    "_source": {
                        "name": "王五",
                        "age": 20,
                        "sex": "女"
                    }
                },
                {
                    "_index": "haoke",
                    "_type": "user",
                    "_id": "MAPYcnEBK3PERGtNx-k7",
                    "_score": 1,
                    "_source": {
                        "id": 1003,
                        "name": "李四",
                        "age": 20,
                        "sex": "女"
                    }
                }
            ]
        }
    }
  • 相关阅读:
    深入浅出接口测试原理及步骤
    软件测试所需要掌握的技能
    Spring Boot(三)—— 自动装配原理
    Spring Boot(一)—— Spring Boot入门
    线程的六种状态
    有关于java中List.add方法进行添加元素,发生覆盖的问题
    《暗时间》读后感
    《基于UML的高校教务管理系统的设计与实现 》论文笔记(六)
    win7下硬盘安装ubuntu
    词频统计
  • 原文地址:https://www.cnblogs.com/haoyueqiang/p/12828192.html
Copyright © 2011-2022 走看看