zoukankan      html  css  js  c++  java
  • Elasticsearch的RESTful API使用

    基本概念:

      索引
        索引(index)是Elasticsearch对逻辑数据的逻辑存储,所以它可以分为更小的部分。
        可以把索引看成关系型数据库的表,索引的结构是为快速有效的全文索引准备的,特别是它不存储原始值。
        Elasticsearch可以把索引存放在一台机器或者分散在多台服务器上,每个索引有一或多个分片(shard),每个分片可以有多个副本(replica)。
      文档
        存储在Elasticsearch中的主要实体叫文档(document)。用关系型数据库来类比的话,一个文档相当于数据库表中的一行记录。

        Elasticsearch和MongoDB中的文档类似,都可以有不同的结构,但Elasticsearch的文档中,相同字段必须有相同类型。
        文档由多个字段组成,每个字段可以多次出现在一个文档里,这样的字段叫多值字段(multivalued)。
        每个字段的类型,可以是文本、数值、日期等。字段类型也可以是复杂类型,一个字段包含其他子文档或者数组。

      映射
        所有文档写进索引之前都会先进行分析,如何将输入的文本分割为词条、哪些词条又会被过滤,这种行为叫做映射(mapping)。一般由用户自己定义规则。
      文档类型
        在Elasticsearch中,一个索引对象可以存储很多不同用途的对象。例如,一个博客应用程序可以保存文章和评论。
        每个文档可以有不同的结构。
        不同的文档类型不能为相同的属性设置不同的类型。例如,在同一索引中的所有文档类型中,一个叫title的字段必须具有相同的类型。

    RESTful API:

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

      创建非结构化索引:

        在Lucene中,创建索引是需要定义字段名称以及字段的类型的,在Elasticsearch中提供了非结构化的索引,就是不需要创建索引结构,即可写入数据到索引中,实际上在Elasticsearch底层会进行结构化操作,此操作对用户是透明的。
        创建空索引

          PUT /haoke

    {
        "settings": {
            "index": {
                "number_of_shards": "2", #分片数
                "number_of_replicas": "0" #副本数
            }
        }
    }

        删除索引

          DELETE /haoke 

    "acknowledged": true
    }

      插入数据:

        POST /{索引库}/{索引类型}/{id}  id如果不传,会自动生成

        POST /haoke/user/1001

    {
        "id": 1001,
        "name": "张三",
        "age": 20,
        "sex": "男"
    }

        

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

        不指定id插入数据:

          POST /haoke/user/

    {
        "id": 1002,
        "name": "张三",
        "age": 20,
        "sex": "男"
    }

          

       更新数据:

        在Elasticsearch中,文档数据是不可修改的,但是可以通过覆盖的方式进行更新,步骤如下:

          1. 从旧文档中检索JSON
          2. 修改它
          3. 删除旧文档
          4. 索引新文档

          PUT /haoke/user/1001

    {
        "id": 1001,
        "name": "李四",
        "age": 30,
        "sex": "女"
    }

        

        局部更新:注意:这里多了_update标识

          POST /haoke/user/1001/_update

    {
        "doc": {
            "age": 23
        }
    }

          

       删除数据:

        在Elasticsearch中,删除文档数据,只需要发起DELETE请求即可。

          DELETE /haoke/user/1001 

          

          需要注意的是,result表示已经删除,version也增加了,如果删除一条不存在的数据,会响应404。

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

        根据id搜索数据

          GET /haoke/user/6NAVEXEBVAiLr6jRjciF

          

         搜索全部数据(默认返回10条数据)

          GET /haoke/user/_search

        关键字搜素数据

          查询年龄等于20的用户

          GET /haoke/user/_search?q=age:20

      DSL搜索:

        Elasticsearch提供丰富且灵活的查询语言叫做DSL查询(Query DSL),它允许你构建更加复杂、强大的查询。
        DSL(Domain Specific Language特定领域语言)以JSON请求体的形式出现。

          POST /haoke/user/_search

    {
        "query": {
            "match": { #match只是查询的一种
                "age": 20
            }
        }
    }

        查询年龄大于18岁的男性用户。

          POST /haoke/user/_search

    {
        "query": {
            "bool": {
                "filter": {
                    "range": {
                        "age": {
                            "gt": 18
                        }
                    }
                },
                "must": {
                    "match": {
                        "sex": "男"
                    }
                }
            }
        }
    }

        全文搜索

          POST /haoke/user/_search

    {
        "query": {
            "match": {
                "name": "张三 李四"
            }
        }
    }

      高亮显示:

        POST /haoke/user/_search

    {
        "query": {
            "match": {
                "name": "张三 李四"
            }
        },
        "highlight": {
                "fields": {
                    "name": {}
            }
        }
    }

        

       聚合:

        在Elasticsearch中,支持聚合操作,类似SQL中的group by操作。

        POST /haoke/user/_search

    {
        "aggs": {
            "all_interests": {
                "terms": {
                    "field": "age"
                }
            }
        }
    }

        

  • 相关阅读:
    Adobe Flash Builder 4.5 Android Air 程序开发系列 之六 多点触控
    Adobe Flash Builder 4.5 Android Air 程序开发系列 之九 定位
    Adobe Flash Builder 4.5 Android Air 程序开发系列 之七 重力感应
    Adobe Flash Builder 4.5 Android Air 程序开发系列 之五 保存数据的几种方式
    Adobe Flash Builder 4.5 Android Air 程序开发系列 之八 照相机
    Adobe Flash Builder 4.5 Android Air 程序开发系列 之三 Application 配置详解
    Adobe Flash Builder 4.5 Android Air 程序开发系列 之四 打开与关闭应用程序是的保存数据
    ADOBE FLASH BUILDER 4.6 IOS 开发之部署与调试
    [译] 高性能JavaScript 1至5章总结
    页签及盒子的web标准实现
  • 原文地址:https://www.cnblogs.com/roadlandscape/p/12568550.html
Copyright © 2011-2022 走看看