• 使用kibana或postman操作Elasticsearch的常用命令


    前言
    服务器:CentOS-6.7

    运行系统:windows10

    JDK版本:1.8

    Elasticsearch版本:5.6.6

    插件:kibana、elasticsearch-head

    工具:postman

    一、集群
    查看集群是否健康

    GET /_cluster/health
    二、节点
    查看节点列表
    后面加了 ?v 可以把表头给显示出来

    GET /_cat/nodes?v


    三、索引
    1 查询索引
    1.1 查询所有索引
    GET /_cat/indices?v
    1.2 查询单个索引的映射
    GET /test_index/_mapping
    2. 添加一个索引(通过mapping)
    PUT /people
    {
      "settings": {
        "number_of_shards": 3,
        "number_of_replicas": 1
      },
      "mappings": {
        "man": {
          "dynamic": "strict",
          "properties": {
            "name": {
              "type": "text"
            },
            "age": {
              "type": "integer"
            },
            "birthday": {
              "type": "date",
              "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
            },
            "address":{
              "dynamic": "true",
              "type": "object"
            }
          }
        }
      }
    }
    "dynamic": "strict"  表示如果遇到陌生field会报错

    "dynamic": "true"   表示如果遇到陌生字段,就进行dynamic mapping

    "dynamic": "false"   表示如果遇到陌生字段,就忽略

    3. 删除索引
    3.1 删除一个索引
    DELETE /people
    3.2 删除多个索引
    DELETE /index_one,index_two
    4. 添加字段映射
    PUT /people/_mapping/man
    {
    "properties": {
    "tags":{
    "type": "text"
    }
    }
    }
    5. 索引的别名
    5.1 创建索引的别名

    PUT /test_index/_alias/test
    5.2 查询索引的别名

    GET /test_index/_alias/*
    5.3 查询别名指向哪一个索引

    GET /*/_alias/test
    四、文档
    1. 增加文档
    1.1 自定义ID
    可以自动创建索引、类型,自己定义一个id

    PUT /people/man/1
    {
    "name": "叶良辰",
    "country": "china",
    "age": 25,
    "birthday": "1993-01-01",
    "desc": "叶良辰,本地人,狂妄自大,惹了他,会有一百种方法让你呆不下去!与赵日天是好基友,两个人风风火火闯九州"
    }
    1.2 随机生成ID
    可以自动创建索引、类型,自动创建一个id

    POST /people/man
    {
    "name": "叶良辰",
    "country": "china",
    "age": 25,
    "birthday": "1993-01-01",
    "desc": "叶良辰,本地人,狂妄自大,惹了他,会有一百种方法让你待不下去!与赵日天是好基友,两个人风风火火闯九州"
    }
    2. 修改文档
    2.1全文修改
    全文修改使用的是PUT命令,把所有字段都带上

    PUT /people/man/1
    {
    "name": "叶良辰",
    "country": "china",
    "age": 25,
    "birthday": "1993-01-01",
    "desc": "叶良辰,本地人,狂妄自大,惹了他,会有一百种方法让你呆不下去!与赵日天是好基友,两个人风风火火闯九州"
    }
    2.2部分修改(partial update)
    使用POST命令,里面使用doc修改某个字段值

    POST /people/man/1/_update
    {
      "doc": {
        "name": "zhangsan"
      }
    }
    2.3 通过脚本直接修改
    POST /people/man/1/_update
    {
    "script": "ctx._source.age += 10"
    }
    或者

    POST /people/man/1/_update
    {
      "script": {
        "lang": "painless",
        "source": "ctx._source.age += 10"
      }
    }
    2.4 通过脚本的参数方式
    POST /people/man/1/_update
    {
      "script": {
        "lang": "painless",
        "source": "ctx._source.age = params.age",
        "params": {
          "age": 100
        }
      }
    }
    2.5 通过groovy脚本文件方式
    首先在%ES_HOME%/config/scripts文件夹下面新建一个groovy文件,取名add-age.groovy

    编辑文件,添加下列内容

    ctx._source.age += param.num

    执行下面的命令

    POST /people/man/1/_update
    {
    "script": {
    "lang": "groovy",
    "file": "add-age",
    "params": {
    "num": 15
    }
    }
    }
    2.6 文档不存在时的修改(upsert)
    在修改document的时候,如果该文档不存在,则使用upsert操作进行初始化

    POST people/man/1/_update
    {
    "script": "ctx._source.age += 10",
    "upsert": {
    "age": 20
    }
    }
    虽然用了+=,但是,上面的结果却是20,因为文档不存在,只是进行了初始化!

    3. 删除文档
    3.1 删除单个文档
    DELETE /people/man/1
    3.2 删除type下的所有文档
    POST /people/man/_delete_by_query?conflicts=proceed
    {
    "query": {
    "match_all": {}
    }
    }
    4.查询文档
    下面列举一些简单的查询,更高级的查询在第五部分做介绍

    4.1 查询单个文档
    GET /people/man/2
    4.2 使用_mget批量查询文档
    GET /_mget
    {
    "docs": [
    {
    "_index": "people",
    "_type": "man",
    "_id": 1
    },
    {
    "_index": "people",
    "_type": "man",
    "_id": 2
    }
    ]
    }
    index和type相同的时候,可以合并到一起:

    GET /people/man/_mget
    {
    "docs": [
    {
    "_id": 1
    },
    {
    "_id": 2
    }
    ]
    }
    4.3 查询所有文档
    方式一(简单查询):
    GET /people/_search
    方式二:
    POST /people/_search
    {
      "query": {
        "match_all": {}
      }
    }
    4.4 查询出某些字段内容
    后面跟了 ?_source=field1,field2

    GET people/man/_search?_source=name,country
    {
    "query": {
    "match": {
    "age": "25"
    }
    }
    }
    4.5 查询多个索引下的多个type
    GET /index1,index2/type1,type2/_search
    查询所有索引下的部分type

    GET /_all/type1,type2/_search
    4.6 模糊查询(全文搜索)
    注意:下面的“叶良辰”会被拆分成:叶、良、辰,只要name里面包含这三个字的任意一个,都会被查询到!

    另外,中英文搜索会不一样,中文是以一个汉字为单位,

    英文默认以一个单词为单位进行拆分

    POST /people/_search
    {
      "query": {
        "match": {
          "name": "叶良辰"
        }
      },
      "sort": [
        {
          "birthday": {
            "order": "desc"
          }
        }
      ]
    }


    4.7 全文搜索的精准度
    4.7.1 搜索结果中必须包括run、jump两种爱好

    GET people/_search
    {
    "query": {
    "match": {
    "hobby": {
    "query": "run jump",
    "operator": "and"
    }
    }
    }
    }
    4.7.2 使用百分比,搜索结果中必须包括6个爱好中的一半,也就是3个

    GET people/_search
    {
    "query": {
    "match": {
    "hobby": {
    "query": "run jump basketball football piano pingpang",
    "minimum_should_match": "50%"
    }
    }
    }
    }
    4.7.3 使用数量,搜索结果中必须包括3个爱好

    GET people/_search
    {
    "query": {
    "bool": {
    "should": [
    {"match": {
    "hobby": "basketball"
    }},
    {"match": {
    "hobby": "pingpang"
    }},
    {"match": {
    "hobby": "piano"
    }},
    {"match": {
    "hobby": "run"
    }}
    ],
    "minimum_should_match": 3
    }
    }
    }


    五、高级查询
    由于内容比较多,篇幅比较大,这里把文章分为两部分,本文是简单的增删改查
    ————————————————
    版权声明:本文为CSDN博主「前方一片光明」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_26230421/article/details/80366649

  • 相关阅读:
    KMP算法代码实现记录
    冒泡,插入,希尔,快速,归并,桶排序,堆排序算法汇总实现
    回溯法个人理解记录(C#八皇后)
    C#创建初始化链表的方式(个人目前写出3种创建的方式)
    算法汇总代表性学习记录
    C#集合去重
    C#获取数组/字符串的k个字符的全部组合
    pl/sql简单执行记录个人学习记录
    oracle为什么尽量不要使用外键的最好理解
    PickerController 添加照片---iOS
  • 原文地址:https://www.cnblogs.com/zeenzhou/p/11588505.html
Copyright © 2020-2023  润新知