1. 程式人生 > >使用kibana或postman操作Elasticsearch的常用命令

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

前言

執行系統: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

1.2 查詢所有的索引及儲存大小

GET /_cat/indices?v

1.3 查詢索引的對映

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

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 test_index/test_type/2/_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 test_index/test_type/2/_update
{
  "script": {
    "lang": "groovy",
    "file": "add-age",
    "params": {
      "num": 15
    }
  }
}

2.6 文件不存在時的修改(upsert)

在修改document的時候,如果該文件不存在,則使用upsert操作進行初始化

POST people/man/10/_update
{
  "script": "ctx._source.age += 10", 
  "upsert": {
    "age": 20
  }
}

雖然用了+=,但是,上面的結果卻是20,因為文件不存在,只是進行了初始化!

3. 刪除文件

3.1 刪除單個文件

DELETE /people/man/1

3.2 刪除type下的所有文件

POST test_index/test_type/_delete_by_query?conflicts=proceed
{
  "query": {
    "match_all": {}
  }
}

4.查詢文件

下面列舉一些簡單的查詢,更高階的查詢在第五部分做介紹

4.1 查詢單個文件

GET /people/man/2

4.2 使用_mget批量查詢文件

GET /_mget
{
  "docs": [
      {
        "_index": "test_index",
        "_type": "test_type",
        "_id": 1
      },
      {
        "_index": "test_index",
        "_type": "test_type",
        "_id": 2
      }
    ]
}

index和type相同的時候,可以合併到一起:

GET /test_index/test_type/_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
    }
  }
}

五、高階查詢

由於內容比較多,篇幅比較大,這裡把文章分為兩部分,本文是簡單的增刪改查

比較複雜的查詢請參考:點選開啟連結