Java API操作Elasticsearch实战回顾篇

获取ES下所有index和type的mappings

ImmutableOpenMap<String, ImmutableOpenMap<String, MappingMetaData>> immutableOpenMap = client.admin().indices()
				.getMappings(new GetMappingsRequest()).actionGet().getMappings();
		List<String> typeList = null;
		Object[] indexList = mappings.keys().toArray();
		for (Object indexObj : indexList) {
			typeList = new ArrayList<String>();
			String index = indexObj.toString();
			ImmutableOpenMap<String, MappingMetaData> mapping = mappings.get(index);
			for (ObjectObjectCursor<String, MappingMetaData> c : mapping) {
				typeList.add(c.key);
			}
			Collections.sort(typeList);
			indexTypeMapping.put(index, typeList);
		}

获取ES下有别名的索引(index)的信息

GetAliasesResponse respone = this.client.admin().indices().getAliases(new GetAliasesRequest()).get();
		return respone.getAliases();

获取指定index和type下的table的structure(mappingSource)

ImmutableOpenMap<String, MappingMetaData> mappings = this.client.admin().cluster().prepareState().execute()
				.actionGet().getState().getMetaData().getIndices().get(index).getMappings();
		return mappings.get(type).getSourceAsMap();

获取指定index和type下的数据Map

SearchResponse searchResponse = this.client.prepareSearch(index).setTypes(type)
				.setQuery(new MatchAllQueryBuilder()).setSize(1).get();
		SearchHits searchHits = searchResponse.getHits();
		SearchHit[] hits = searchHits.getHits();
		Map<String, Object> source = Maps.newHashMap();
		Map<String, Object> mapID = Maps.newHashMap();
		for (SearchHit hit : hits) {
			String id = hit.getId();
			source = hit.getSource();
			mapID.put("_id", id);
			source.put("_id", mapID);
		}
		return source;

这里有点小插曲,为什么我要这样准备id,而不直接在source里面put,而是要用一个map再source put,是因为,如果一开始不new一个map,你put不进去source里面,所以我才出此下策,所以在source里面我的id的结构是

{id,{id,value}}

我也不清楚为什么会这样,我猜测是因为它的类型是Map<String,Object>,实际上要传进去的应该是Map<String,Map<String,String>>,所以当我们传进Map<String,String>的时候就会失败。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值