【小白笔记】Elastic Search使用Rest风格请求的CRUD

Rest风格说明

method url地址 描述
PUT localhost:9200/索引名称/类型名称/文档id 创建文档(指定文档id)
POST localhost:9200/索引名称/类型名称 创建文档(随机文档ID)
POST localhost:9200/索引名称/类型名称/文档id/_update 修改文档
DELETE Localhost:9200/索引名称/类型名称/文档id 删除文档
GET Localhost:9200/索引名称/类型名称/文档id 查询文档通过文档ID
POST Localhost:9200/索引名称/类型名称/_search 查询所有数据

关于索引以及文档的基本操作

  1. 创建一个文档

    PUT /索引名/--类型名--/文档id
    {
      请求体
    }

    ![](/Users/weihaolee/Library/Application Support/typora-user-images/截屏2021-02-26 12.54.58.png)

    完成了自动增加索引  数据也成功的添加了

    【小白笔记】Elastic Search使用Rest风格请求的CRUD
  2. 配置字段类型

    PUT /test2
    {
      "mappings": {
        "properties": {
          "name": {
            "type": "text"
          },
          "age" :{
            "type": "long"
          },
          "birthday": {
            "type": "date"
          }
        }
      }
    }

查看数据

POST /test3/_search
【小白笔记】Elastic Search使用Rest风格请求的CRUD

查看字段类型

GET test2
【小白笔记】Elastic Search使用Rest风格请求的CRUD

默认字段类型

  • 添加数据
PUT /test3/_doc/1
{
  "name": "SkyID",
  "age": 21,
  "birth": "2000-08-23"
}
  • 查看自动分配的字段类型
【小白笔记】Elastic Search使用Rest风格请求的CRUD

如果自己的文档字段没有指定,那么es就会给我们默认配置字段类型

扩展:通过命令elastic search索引情况 通过GET _cat/ 可以获取当前es的更多信息【小白笔记】Elastic Search使用Rest风格请求的CRUD

  • 根据指定内容匹配

    #根据name进行搜索(简单查询)
    GET /sky/user/_search?q=name:Sky
    #对于复杂条件标准写法 _source选择展示的数据 sort为排序 
    #from和size为分页功能  
    #from表示从第几个数据开始 size表示返回多少条数据(单页面数据)
    GET /sky/user/_search
    {
      "query":{
        "match": {
          "name":"Sky"
        }
      },
      "_source":["name","desc"],
      "sort":[
          {
            "age":{
              "order": "desc"
            }
          }
        ],
       "from": 0,
        "size": 1
    }
  • 布尔值查询

    多条件查询 must(相当于and),所有的条件都要符合

    GET /sky/_search
    {
      "query":{
        "bool": {
          "must": [
            {
              "match": {
                "name": "潭"
              }
            },
            {
              "match": {
                "age": "2"
              }
            }
          ]
        }
      }
    }

    多条件查询 should(相当于or),满足一个就可以

    GET /sky/_search
    {
      "query":{
        "bool": {
          "should": [
            {
              "match": {
                "name": "潭"
              }
            },
            {
              "match": {
                "age": "2"
              }
            }
          ]
        }
      }
    }

    多条件查询 must_not(相当于not),满足一个就可以

    GET /sky/_search
    {
      "query":{
        "bool": {
          "must_not": [
            {
              "match": {
                "name": "潭"
              }
            },
            {
              "match": {
                "age": "2"
              }
            }
          ]
        }
      }
    }

    过滤器 filter (gt大于、gte大于等于、lt小于、lte小于等于、eq等于)

    GET /sky/_search
    {
      "query":{
        "bool": {
          "must": [
            {
              "match": {
                "name": "潭"
              }
            }
          ],
          "filter": [
            {
              "range": {
                "age": {
                  "gt": 10
                }
              }
            }
          ]
        }
      }
    }

    多条件查询 多个条件使用空格隔开进行查询 只要满足其一便可被查出来 通过分值进行基本的判断

    GET /sky/_search
    {
      "query":{
       "match": {
         "tags": "男 王"
       }
      }
    }

  • 精确查询

    term查询是直接通过倒排索引指定的词条进程精确查找的

    关于分词:

    term,直接查询精确  搭配keyword使用

    match 会使用分词器解析 (先分析文档,然后在通过分析的文档进行查询)

    「两个类型 text keyword」

    • 创建测试文档

      # 设定索引类型
      PUT /testdb
      {
        "mappings": {
          "properties": {
            "name":{
              "type": "text"
            },
            "desc": {
              "type": "keyword"
            }
          }
        }
      }

      # 添加两条数据用于测试
      PUT /testdb/_doc/1
      {
        "name": "李维昊",
        "desc": "我是一个程序员"
      }

      PUT /testdb/_doc/2
      {
        "name": "李维昊2",
        "desc": "我是一个程序员2"
      }
    • 查询name(text类型)

      GET testdb/_search
      {
        "query": {
          "term": {
            "name": "李"
          }
        }
      }

      两条信息均有返回

    • 查询desc(keyword类型)

      GET testdb/_search
      {
        "query": {
          "term": {
            "desc": "我是一个程序员"
          }
        }
      }

      返回结果仅为一个

      【小白笔记】Elastic Search使用Rest风格请求的CRUD

      并且如果我们改为单字搜索发现

      GET testdb/_search
      {
        "query": {
          "term": {
            "desc": "程"
          }
        }
      }

      发现无返回结果

      【小白笔记】Elastic Search使用Rest风格请求的CRUD
  • 高亮查询

    GET testdb/_search
    {
      "query": {
        "match": {
          "name": "李维昊"
        }
      },
      "highlight": {
        "fields": {
          "name": {}
        }
      }
    }

    查看返回结果发现「李维昊」添加了标签

    【小白笔记】Elastic Search使用Rest风格请求的CRUD

    同样的我们可以自定义返回标签

    GET testdb/_search
    {
      "query": {
        "match": {
          "name": "李维昊"
        }
      },
      "highlight": {
        "pre_tags": "<p>", 
        "post_tags": "</p>", 
        "fields": {
          "name": {}
        }
      }
    }
    【小白笔记】Elastic Search使用Rest风格请求的CRUD

在Elastic Search当中我们有可以使用两种方式进行数据修改

  1. 重新使用PUT值进行添加数据

    首先查询文档当前内容

    POST /test3/_search
    【小白笔记】Elastic Search使用Rest风格请求的CRUD

    使用PUT重新添加数据(将名字修改)

    PUT /test3/_doc/1
    {
      "name": "WeiHao.L",
      "age": 21,
      "birth": "2000-08-23"
    }

    执行指令,通过es返回的json信息我们可以看到其中的version版本变为了2。证明我们此索引数据进行了更新

    【小白笔记】Elastic Search使用Rest风格请求的CRUD

    再次使用search进行查询,更新成功

    【小白笔记】Elastic Search使用Rest风格请求的CRUD

    但是这种方式的缺点为如果我们忘记输入某一项的值 会出现单条记录被清空的情况(如图 name被清空)

    【小白笔记】Elastic Search使用Rest风格请求的CRUD
  2. 使用POST方法进行update

    此方法仅需将需要更新的数据进行发送请求即可

    POST /test3/_doc/1/_update
    {
      "doc" :{
        "name": "Sky"
      }
    }

    更新成功

    【小白笔记】Elastic Search使用Rest风格请求的CRUD

DELETE test1
上一篇:OSX Server:登陆太慢等问题的排查小结


下一篇:Logstash 之 重要插件