es5.3【7】获取es索引结构、根据id获取并修改数据

本文详细介绍如何使用Java进行Elasticsearch数据操作,包括根据ID获取单条数据、获取ES索引结构以及更新数据的具体实现。通过具体代码展示了如何连接ES客户端,获取指定ID的数据,解析表结构,以及如何在遇到节点连接失败时进行重试更新数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.根据id获取一条数据
2.获取es索引结构
3.修改数据

package com.yb.es;

import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.update.UpdateRequestBuilder;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.NoNodeAvailableException;
import org.elasticsearch.cluster.metadata.MappingMetaData;
import org.elasticsearch.common.collect.ImmutableOpenMap;

import com.alibaba.fastjson.JSONObject;

public class GetData {
	
	String esTable="land_chufa";
	
	public static void main(String[] args) {
		//根据id获取一条数据
		new GetData().getDataById();
		
		//获取表结构
//		new GetData().getESTable();
	}
	private void getESTable() {
		Client client = ESUtils.getClient();
		ImmutableOpenMap<String, MappingMetaData> mappings = client.admin().cluster().prepareState().execute().actionGet().getState().getMetaData().getIndices().get(esTable).getMappings();
		String mapping = mappings.get(esTable).source().toString();
		System.out.println(mapping);
	}
	private void getDataById() {
		String esid="AWsMss1CUgsUu1M-MHuY";
		Client client = ESUtils.getClient();
		GetResponse response = client.prepareGet(esTable,esTable,esid).get();
		String str = response.getSourceAsString();
		System.out.println(str);
		
		//根据主键修改数据
		toUpdate(esid,str);
		
	}
	private void toUpdate(String esid, String str) {
		Client client = ESUtils.getClient();
		JSONObject jsonObject = JSONObject.parseObject(str);
		jsonObject.put("pname", "定海区临城街道惠民桥村村民哈哈哈");
		
		while(true) {
			try {
				UpdateRequestBuilder updateBuilder = client.prepareUpdate(esTable, esTable, esid);
				updateBuilder.setDoc(jsonObject.toString()).execute().actionGet();//setRefresh(true)实时刷新
				System.out.println("修改成功");
				break;
			} catch (NoNodeAvailableException e) {
				try {
					System.out.println("节点连不上,重试 sleep10s");
					Thread.sleep(10000);
				} catch (InterruptedException e1) {
					e1.printStackTrace();
				}
			}
		}
		
	}
	
}

修改成功
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值