Java API之索引管理.docx
- 文档编号:10177792
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:16
- 大小:18.26KB
Java API之索引管理.docx
《Java API之索引管理.docx》由会员分享,可在线阅读,更多相关《Java API之索引管理.docx(16页珍藏版)》请在冰豆网上搜索。
JavaAPI之索引管理
JavaAPI之索引管理
ElasticSearch为了便于处理索引管理(Indicesadministration)请求,提供了
org.elasticsearch.client.IndicesAdminClient接口。
通过如下代码从Client对象中获得这个接口的实现:
IndicesAdminClientindicesAdminClient=client.admin().indices();
IndicesAdminClient定义了好几种prepareXXX()方法作为创建请求的入口点。
1.索引存在API
索引存在API用于检查集群中是否存在由prepareExists调用指定的索引。
/**
*判断索引是否存在
*@paramclient
*@paramindex
*@return
*/
publicstaticbooleanisIndexExists(Clientclient,Stringindex){
if(Objects.equal(client,null)){
logger.info("---------IndexAPIisIndexExists请求客户端为null");
returnfalse;
}
if(StringUtils.isBlank(index)){
logger.info("---------IndexAPIisIndexExists索引名称为空");
returnfalse;
}
IndicesAdminClientindicesAdminClient=client.admin().indices();
IndicesExistsResponseresponse=indicesAdminClient.prepareExists(index).get();
returnresponse.isExists();
/*另一种方式
IndicesExistsRequestindicesExistsRequest=newIndicesExistsRequest(index);
IndicesExistsResponseresponse=client.admin().indices().exists(indicesExistsRequest).actionGet();*/
}
prepareExists()可以同时指定多个索引:
IndicesExistsResponseresponse=indicesAdminClient.prepareExists(index1,index2....).get();
2.类型存在API
类型存在API和索引存在API类似,只是不是用来检查索引是否存在,而是检查指定索引下的指定类型是否存在。
为了确保成功返回结果,请确保索引已经存在,否则不会查找到指定的类型。
下面代码演示查找索引下的指定类型:
/**
*判断类型是否存在
*@paramclient
*@paramindex
*@paramtype
*@return
*/
publicstaticbooleanisTypeExists(Clientclient,Stringindex,Stringtype){
if(!
isIndexExists(client,index)){
logger.info("---------isTypeExists索引[{}]不存在",index);
returnfalse;
}
IndicesAdminClientindicesAdminClient=client.admin().indices();
TypesExistsResponseresponse=indicesAdminClient.prepareTypesExists(index).setTypes(type).get();
returnresponse.isExists();
}
3.创建索引API
创建索引API可以用来建立一个新索引。
我们可以创建空索引或者给它设置它的映射(mapping)和设置信息(settings)。
3.1创建空索引
下面代码创建了一个空索引:
/**
*创建空索引默认setting无mapping
*@paramclient
*@paramindex
*@return
*/
publicstaticbooleancreateSimpleIndex(Clientclient,Stringindex){
IndicesAdminClientindicesAdminClient=client.admin().indices();
CreateIndexResponseresponse=indicesAdminClient.prepareCreate(index).get();
returnresponse.isAcknowledged();
}
查看索引状态信息:
{
"state":
"open",
"settings":
{
"index":
{
"creation_date":
"1476078197394",
"number_of_shards":
"5",
"number_of_replicas":
"1",
"uuid":
"rBATEkx_SBq_oUEIlW8ryQ",
"version":
{
"created":
"2030399"
}
}
},
"mappings":
{
},
"aliases":
[
]
}
3.2.创建复杂索引
下面代码创建复杂索引,给它设置它的映射(mapping)和设置信息(settings),指定分片个数为3,副本个数为2,同时设置school字段不分词。
/**
*创建索引指定setting
*@paramclient
*@paramindex
*@return
*/
publicstaticbooleancreateIndex(Clientclient,Stringindex){
//settings
Settingssettings=Settings.builder().put("index.number_of_shards",3).put("index.number_of_replicas",2).build();
//mapping
XContentBuildermappingBuilder;
try{
mappingBuilder=XContentFactory.)
.startObject()
.startObject(index)
.startObject("properties")
.startObject("name").field("type","string").field("store","yes").endObject()
.startObject("sex").field("type","string").field("store","yes").endObject()
.startObject("college").field("type","string").field("store","yes").endObject()
.startObject("age").field("type","integer").field("store","yes").endObject()
.startObject("school").field("type","string").field("store","yes").field("index","not_analyzed").endObject()
.endObject()
.endObject()
.endObject();
}catch(Exceptione){
logger.error("---------createIndex创建mapping失败:
",e);
returnfalse;
}
IndicesAdminClientindicesAdminClient=client.admin().indices();
CreateIndexResponseresponse=indicesAdminClient.prepareCreate(index)
.setSettings(settings)
.addMapping(index,mappingBuilder)
.get();
returnresponse.isAcknowledged();
}
查看索引状态信息:
{
"state":
"open",
"settings":
{
"index":
{
"creation_date":
"1476078400025",
"number_of_shards":
"3",
"number_of_replicas":
"2",
"uuid":
"ToakRDisSYyX7vjH30HR-g",
"version":
{
"created":
"2030399"
}
}
},
"mappings":
{
"simple-index":
{
"properties":
{
"college":
{
"store":
true,
"type":
"string"
},
"school":
{
"index":
"not_analyzed",
"store":
true,
"type":
"string"
},
"sex":
{
"store":
true,
"type":
"string"
},
"name":
{
"store":
true,
"type":
"string"
},
"age":
{
"store":
true,
"type":
"integer"
}
}
}
},
"aliases":
[
]
}
4.删除索引
删除索引API允许我们反向删除一个或者多个索引。
/**
*删除索引
*@paramclient
*@paramindex
*/
publicstaticbooleandeleteIndex(Clientclient,Stringindex){
IndicesAdminClientindicesAdminClient=client.admin().indices();
DeleteIndexResponseresponse=indicesAdminClient.prepareDelete(index).execute().actionGet();
returnresponse.isAcknowledged();
}
5.关闭索引
关闭索引API允许我们关闭不使用的索引,进而释放节点和集群的资源,如cpu时钟周期和内存。
/**
*关闭索引
*@paramclient
*@paramindex
*@return
*/
publicstaticbooleancloseIndex(Clientclient,Stringindex){
IndicesAdminClientindicesAdminClient=client.admin().indices();
CloseIndexResponseresponse=indicesAdminClient.prepareClose(index).get();
returnresponse.isAcknowledged();
}
测试:
@Test
publicvoidcloseIndex()throwsException{
Stringindex="suggestion-index";
if(!
IndexAPI.isIndexExists(client,index)){
logger.info("---------closeIndex索引[{}]不存在",index);
return;
}
booleanresult=IndexAPI.closeIndex(client,index);
logger.info("---------closeIndex{}",result);
}
关闭之前:
关闭之后:
6.打开索引
打开索引API允许我们打开我们之前使用关闭索引API
/**
*关闭索引
*@paramclient
*@paramindex
*@return
*/
publicstaticbooleanopenIndex(Clientclient,Stringindex){
IndicesAdminClientindicesAdminClient=client.admin().indices();
OpenIndexResponseresponse=indicesAdminClient.prepareOpen(index).get();
returnresponse.isAcknowledged();
}
7.设置映射API
设置映射API允许我们在指定索引上一次性创建或修改一到多个索引的映射。
如果设置映射必须确保指定的索引必须存在,否则会报错。
/**
*设置映射
*@paramclient
*@paramindex
*@paramtype
*@return
*/
publicstaticbooleanputIndexMapping(Clientclient,Stringindex,Stringtype){
//mapping
XContentBuildermappingBuilder;
try{
mappingBuilder=XContentFactory.)
.startObject()
.startObject(type)
.startObject("properties")
.startObject("name").field("type","string").field("store","yes").endObject()
.startObject("sex").field("type","string").field("store","yes").endObject()
.startObject("college").field("type","string").field("store","yes").endObject()
.startObject("age").field("type","long").field("store","yes").endObject()
.startObject("school").field("type","string").field("store","yes").field("index","not_analyzed").endObject()
.endObject()
.endObject()
.endObject();
}catch(Exceptione){
logger.error("---------createIndex创建mapping失败:
",e);
returnfalse;
}
IndicesAdminClientindicesAdminClient=client.admin().indices();
PutMappingResponseresponse=indicesAdminClient.preparePutMapping(index).setType(type).setSource(mappingBuilder).get();
returnresponse.isAcknowledged();
}
先创建一个空索引,这样该索引上不会有映射,再使用下面代码添加映射:
@Test
publicvoidputIndexMapping()throwsException{
Stringindex="simple-index";
Stringtype="simple-type";
if(!
IndexAPI.isIndexExists(client,index)){
logger.info("---------putIndexMapping索引[{}]不存在",index);
return;
}
booleanresult=IndexAPI.putIndexMapping(client,index,type);
logger.info("---------putIndexMapping{}",result);
}
添加映射之后的索引信息:
{
"state":
"open",
"settings":
{
"index":
{
"creation_date":
"1476108496237",
"number_of_shards":
"5",
"number_of_replicas":
"1",
"uuid":
"9SR5OQJ-QLSARFjmimvs1A",
"version":
{
"created":
"2030399"
}
}
},
"mappings":
{
"simple-type":
{
"properties":
{
"college":
{
"store":
true,
"type":
"string"
},
"school":
{
"index":
"not_analyzed",
"store":
true,
"type":
"string"
},
"sex":
{
"store":
true,
"type":
"string"
},
"name":
{
"store":
true,
"type":
"string"
},
"age":
{
"store":
true,
"type":
"long"
}
}
}
},
"aliases":
[
]
}
8.别名API
别名API允许我们可以为已经存在的索引创建别名
/**
*为索引创建别名
*@paramclient
*@paramindex
*@paramalias
*@return
*/
publicstaticbooleanaddAliasIndex(Clientclient,Stringindex,Stringalias){
IndicesAdminClientindicesAdminClient=client.admin().indices();
IndicesAliasesResponseresponse=indicesAdminClient.prepareAliases().addAlias(index,alias).get();
returnresponse.isAcknowledged();
}
测试:
下面代码为simple-index索引创建一个别名为simple:
@Test
publicvoidaddAliasIndex()throwsException{
Stringindex="simple-index";
StringaliasName="simple";
booleanresult=IndexAPI.addAliasIndex(client,index,aliasName);
logger.info("---------addAliasIndex{}",result);
}
结果图:
9.别名存在API
别名存在API允许我们检查是否存在至少一个我们列举出的的别名,注意是判断的索引别名,不是索引。
我们可以在别名中使用星号通配符。
/**
*判断别名是否存在
*@paramclient
*@paramaliases
*@return
*/
publicstaticbooleanisAliasExist(Clientclient,String...aliases){
IndicesAdminClientindicesAdminClient=client.admin().indices();
AliasesExistResponseresponse=indicesAdminClient.prepareAliasesExist(aliases).get();
returnresponse.isExists();
}
测试,下面代码检查以sim开头的索引别名和test索引别名是否存在,我们列举的索引别名只要有一个存在就会返回true。
@Test
publicvoidisAliasExist()throwsException{
StringaliasName="simp*";
StringaliasName2="test";
booleanresult=IndexAPI.isAliasExist(client,aliasName,aliasName2);
logger.info("---------isAliasExist{}",result);//true
}
10.获取别名API
获取别名API可以列举出当前已经定义的的别名
/**
*获取别名
*@paramclient
*@paramaliases
*/
publicstaticvoidgetAliasIndex(Clientclient,String...aliases){
IndicesAdminClientindicesAdminClient=client.admin().indices();
GetAliasesResponseresponse=indicesAdminClient.prepareGetAliases(aliases).get();
ImmutableOpenMap
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java API之索引管理 API 索引 管理