目录
获取连接的配置类
创建索引并且为创建的索引设置一些映射配置
删索引库
删除索引中的文档
判断索引是否存在
获取连接的配置类
具体的测试环境的搭建可以参考我的上一篇博客:通过java代码实现ES中的常用搜索_未来很长,别只看眼前的博客-CSDN博客文章来源:https://www.toymoban.com/news/detail-507101.html
@Configuration
public class ElasticSearchConfig {
@Value("${eslearn.elasticsearch.hostlist}")
private String hostList;
@Bean(destroyMethod = "close") //表示连接使用完成后需要关闭
public RestHighLevelClient restHighLevelClient(){
String[] split = hostList.split(",");
//这种写法是考虑到可能会配置多个es节点
HttpHost[] httpHosts = new HttpHost[split.length];
for (int i = 0; i < split.length; i++) {
String item = split[i];
httpHosts[i] = new HttpHost(item.split(":")[0],Integer.parseInt(item.split(":")[1]),"http");
}
return new RestHighLevelClient(RestClient.builder(httpHosts));
}
}
创建索引并且为创建的索引设置一些映射配置
//创建索引 并且为创建的索引设置一些映射配置
@Test
public void testCreateIndex() throws IOException {
//创建索引对象
CreateIndexRequest createIndexRequest = new CreateIndexRequest("test_createindex");
//设置参数
createIndexRequest.settings(Settings.builder().put("number_of_shards", "1").put("number_of_replicas", "0"));
//指定映射方式1 在kibana中测试一遍直接复制过来就行 不过不知道为啥一直报错:Failed to parse content to map 最后还是选择使用java来进行处理了
// createIndexRequest.mapping(" {\n" +
// " \t\"properties\": {\n" +
// " \"name\":{\n" +
// " \"type\":\"keyword\"\n" +
// " },\n" +
// " \"description\": {\n" +
// " \"type\": \"text\"\n" +
// " },\n" +
// " \"price\":{\n" +
// " \"type\":\"long\"\n" +
// " },\n" +
// " \t}\n" +
// "}", XContentType.JSON);
//指定映射方式2 索引名称必须小写 这个测试成功了 但是只有一个字段 如果想要多个字段呢?
Map<String, Object> message = new HashMap<>();
message.put("type", "text");
Map<String, Object> name = new HashMap<>();
name.put("type", "keyword"); //为字段声明映射的数据类型
//把声明好的字段塞到配置中
Map<String, Object> properties = new HashMap<>();
properties.put("message", message);
properties.put("name",name);
//把配置塞到映射中
Map<String, Object> mapping = new HashMap<>();
mapping.put("properties", properties);
createIndexRequest.mapping(mapping);
//设置别名
createIndexRequest.alias(new Alias("create_index_test"));
// 额外参数
//设置超时时间
createIndexRequest.setTimeout(TimeValue.timeValueMinutes(2));
//设置主节点超时时间
createIndexRequest.setMasterTimeout(TimeValue.timeValueMinutes(1));
//在创建索引API返回响应之前等待的活动分片副本的数量,以int形式表示
createIndexRequest.waitForActiveShards(ActiveShardCount.from(2));
createIndexRequest.waitForActiveShards(ActiveShardCount.DEFAULT);
//操作索引的客户端
IndicesClient indices = client.indices();
//执行创建索引库
CreateIndexResponse response = indices.create(createIndexRequest, RequestOptions.DEFAULT);
}
删索引库
//删除索引库
@Test
public void testDeleteIndex() throws IOException {
//判断索引是否存在
GetIndexRequest getIndexRequest = new GetIndexRequest("test_createindex");
boolean exists = client.indices().exists(getIndexRequest, RequestOptions.DEFAULT);
if (exists){
//删除索引对象
DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest("test_createindex");
//操作索引的客户端
IndicesClient indices = client.indices();
//执行删除索引
AcknowledgedResponse delete = indices.delete(deleteIndexRequest, RequestOptions.DEFAULT);
//得到响应
boolean acknowledged = delete.isAcknowledged();
System.out.println(acknowledged);
}
}
删除索引中的文档
/**
* 删除es中指定的数据
* @param ids 文档的id标识集合
*/
public void deleteIndexDoc(List<String> ids){
if(ids.size()>0){
BulkRequest request = new BulkRequest();
//删除
for(String id:ids){
request.timeout(TimeValue.timeValueMinutes(5)).add(new DeleteRequest("test_createindex",id));
}
try {
client.bulk(request, RequestOptions.DEFAULT);
} catch (Exception e) {
e.printStackTrace();
}finally {
//可以执行一下释放资源的操作
}
}
}
文章来源地址https://www.toymoban.com/news/detail-507101.html
判断索引是否存在
// 判断索引是否存在 可以用来初始化搜索的时候用 如果没有索引那就创建索引
@Test
public void testExistIndex() throws IOException {
GetIndexRequest request = new GetIndexRequest("test_createindex");
// request.local(false);//从主节点返回本地信息或检索状态
// request.humanReadable(true);//以适合人类的格式返回结果
// request.includeDefaults(false);//是否返回每个索引的所有默认设置
boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
System.out.println(exists);
}
}
到了这里,关于java api 实现es中的索引管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!