天天看點

Elasticsearch基礎03——索引的操作

關于版本

内容 版本
Elasticsearch版本 7.2.0
JAVA依賴版本 7.2.1
Elasticsearch 7.x 和之前版本有相當大的變化,是以本篇内容尤其是JAVA代碼的操作對于使用舊版本的同學幫助可能不大。因為本人主要是JAVA開發,在介紹相關操作的時候會附帶JAVA代碼操作的邏輯。

Elasticsearch的API

ElasticSearch提供了REST風格的API,我們可以用JSON格式的參數通路指定URL進行資源的操作。作為一個RESTful風格的API。不同的請求方式(GET、POST、DELETE、PUT)在相同的URL情況下發揮着不同的作用。

索引的操作

新增索引

Elasticsearch使用PUT方式來實作索引的新增。你可以在建立索引的時候不添加任何參數,系統會為你建立一個預設的索引,當然你可以添加附加一些配置資訊

使用http請求

可以直接使用此請求建立索引。

PUT "localhost:9200/test_city_info"

           

也可以附帶一些配置

{
   "settings" : {
      "index" : {
         "number_of_shards" : 3, "number_of_replicas" : 3
      }
   }
}

           

響應結果

其參數

acknowledged

表名索引已經建立

{
    "acknowledged": true,
    "shards_acknowledged": true,
    "index": "test_city_info"
}

           

java指令

public static void createIndex() throws IOException {
        CreateIndexRequest createIndex = new CreateIndexRequest("test_city_info4");
        // RestClientUtils.client為es的連接配接執行個體,可以自己實作
        CreateIndexResponse response = RestClientUtils.client.indices().create(createIndex, RequestOptions.DEFAULT);
        System.out.println(response.isAcknowledged());

    }
    
           

查詢索引

使用http請求

Elasticsearch使用和建立索引一樣的URL但是請求方法為GET的API來檢視索引内容

GET localhost:9200/test_city_info2
           

響應内容

此時可以看到剛才建立的索引已經存在

{
    "test_city_info2": {
        "aliases": {},
        "mappings": {},
        "settings": {
            "index": {
                "creation_date": "1571103979640",
                "number_of_shards": "1",
                "number_of_replicas": "1",
                "uuid": "ldQ3_2C5TLe7Bm8eIx6Igg",
                "version": {
                    "created": "7020099"
                },
                "provided_name": "test_city_info2"
            }
        }
    }
}
           

傳回内容

這裡簡單的介紹下傳回值的内容

字段 内容
aliases 别名
mappings 映射
settings 配置
settings.index.creation_date 建立時間
settings.index.number_of_shards 資料分片數
settings.index.number_of_replicas 資料備份數
settings.index.uuid 索引id
settings.index.provided_name 名稱

使用java代碼

public static void queryIndex() throws IOException {
        GetIndexRequest getIndex = new GetIndexRequest("test_city_info4");
        // RestClientUtils.client為es的連接配接執行個體,可以自己實作
        GetIndexResponse response = RestClientUtils.client.indices().get(getIndex, RequestOptions.DEFAULT);
        System.out.println(response.getMappings().get("key"));

    }
           

批量查詢索引

使用http請求

在上面建立索引之後,又建立了一個test_city_info2索引。可以通過下面方法同時擷取兩個索引的資訊。

響應

{
    "test_city_info": {
        "aliases": {},
        "mappings": {},
        "settings": {
            "index": {
                "creation_date": "1571103126318",
                "number_of_shards": "1",
                "number_of_replicas": "1",
                "uuid": "ljfFHhspSSmGaBVD3PHjbA",
                "version": {
                    "created": "7020099"
                },
                "provided_name": "test_city_info"
            }
        }
    },
    "test_city_info2": {
        "aliases": {},
        "mappings": {},
        "settings": {
            "index": {
                "creation_date": "1571103979640",
                "number_of_shards": "1",
                "number_of_replicas": "1",
                "uuid": "ldQ3_2C5TLe7Bm8eIx6Igg",
                "version": {
                    "created": "7020099"
                },
                "provided_name": "test_city_info2"
            }
        }
    }
}
           

使用java代碼

public static void createIndex() throws IOException {
        DeleteIndexRequest deleteIndex = new DeleteIndexRequest("test_city_info4");
        AcknowledgedResponse response = RestClientUtils.client.indices().delete(deleteIndex, RequestOptions.DEFAULT);
        System.out.println(response.isAcknowledged());
    }
           

擷取全部索引

當我們想檢視系統中所有的索引的時候可以使用

_all

的方式檢視所有的索引。

使用http請求

響應内容

{
    "test_city_info": {
        "aliases": {},
        "mappings": {},
        "settings": {
            "index": {
                "creation_date": "1571103126318",
                "number_of_shards": "1",
                "number_of_replicas": "1",
                "uuid": "ljfFHhspSSmGaBVD3PHjbA",
                "version": {
                    "created": "7020099"
                },
                "provided_name": "test_city_info"
            }
        }
    },
    "test_city_info2": {
        "aliases": {},
        "mappings": {},
        "settings": {
            "index": {
                "creation_date": "1571103979640",
                "number_of_shards": "1",
                "number_of_replicas": "1",
                "uuid": "ldQ3_2C5TLe7Bm8eIx6Igg",
                "version": {
                    "created": "7020099"
                },
                "provided_name": "test_city_info2"
            }
        }
    }
}
           

使用java代碼

删除索引

Elasticsearch使用和建立索引一樣的URL來進行索引的删除,但是需要注意這次使用的是DELETE的請求方式。

使用http請求

響應内容

通過

acknowledged

參數内容,我們可以确認索引已經移除

{
    "acknowledged": true
}
           

是否存在指定索引

這裡就直接使用查詢索引的方式,向某個索引發送GET請求,就可以确定該索引是否存在。如果HTTP響應為200,則存在;如果是404,則不存在

使用http請求

響應

{
    "error": {
        "root_cause": [
            {
                "type": "index_not_found_exception",
                "reason": "no such index [test_city_info2]",
                "resource.type": "index_or_alias",
                "resource.id": "test_city_info2",
                "index_uuid": "_na_",
                "index": "test_city_info2"
            }
        ],
        "type": "index_not_found_exception",
        "reason": "no such index [test_city_info2]",
        "resource.type": "index_or_alias",
        "resource.id": "test_city_info2",
        "index_uuid": "_na_",
        "index": "test_city_info2"
    },
    "status": 404
}
           

使用java代碼

public static void existsIndex() throws IOException {
        GetIndexRequest createIndex = new GetIndexRequest("test_city_info4");
        boolean exists = RestClientUtils.client.indices().exists(createIndex, RequestOptions.DEFAULT);
        System.out.println(exists);

   }
           

關閉索引

在一些業務場景,我們可能需要禁止掉某些索引的通路功能,但是又不想删除這個索引。這時候可以使用關閉索引的功能,這樣這個索引暫時無法被通路到,在後續需要的時候可以再次開啟此索引。

Elasticsearch使用使用

_close

以及

POST

請求方法來關閉某個索引

使用http請求

響應内容

{
    "acknowledged": true,
    "shards_acknowledged": true
}
           

此時我們嘗試通路此索引會發現已經不能正常通路。

{
    "test_city_info": {
        "aliases": {},
        "mappings": {},
        "settings": {
            "index": {
                "verified_before_close": "true",
                "number_of_shards": "1",
                "provided_name": "test_city_info",
                "creation_date": "1571103126318",
                "number_of_replicas": "1",
                "uuid": "ljfFHhspSSmGaBVD3PHjbA",
                "version": {
                    "created": "7020099"
                }
            }
        }
    }
}
           

"verified_before_close": "true"

顯示此索引被關閉

使用java代碼

public static void closeIndex() throws IOException {
        CloseIndexRequest closeIndex = new CloseIndexRequest("test_city_info4");
        AcknowledgedResponse close = RestClientUtils.client.indices().close(closeIndex, RequestOptions.DEFAULT);
        System.out.println(close.isAcknowledged());

    }
           

打開索引

當然索引可以被關閉也需要被打開,Elasticsearch使用

_open

以及

POST

請求方法來關閉某個索引

使用http請求

響應

{
    "acknowledged": true,
    "shards_acknowledged": true
}
           

此時我們嘗試通路此索引會發現已經可以正常通路。

{
    "test_city_info": {
        "aliases": {},
        "mappings": {},
        "settings": {
            "index": {
                "creation_date": "1571103126318",
                "number_of_shards": "1",
                "number_of_replicas": "1",
                "uuid": "ljfFHhspSSmGaBVD3PHjbA",
                "version": {
                    "created": "7020099"
                },
                "provided_name": "test_city_info"
            }
        }
    }
}
           

此時索引内容

"verified_before_close": "true"

不再顯示

使用java代碼

public static void openIndex() throws IOException {
        OpenIndexRequest openIndex = new OpenIndexRequest("test_city_info4");
        OpenIndexResponse open = RestClientUtils.client.indices().open(openIndex, RequestOptions.DEFAULT);
        System.out.println(open.isAcknowledged());

    }
           
個人水準有限,上面的内容可能存在沒有描述清楚或者錯誤的地方,假如開發同學發現了,請及時告知,我會第一時間修改相關内容。假如我的這篇内容對你有任何幫助的話,麻煩給我點一個贊。你的點贊就是我前進的動力。

繼續閱讀