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