Java API操作Elasticsearch实战回顾篇

获取ES下所有index和type的mappings

ImmutableOpenMap> immutableOpenMap = client.admin().indices()
				.getMappings(new GetMappingsRequest()).actionGet().getMappings();
		List typeList = null;
		Object[] indexList = mappings.keys().toArray();
		for (Object indexObj : indexList) {
			typeList = new ArrayList();
			String index = indexObj.toString();
			ImmutableOpenMap mapping = mappings.get(index);
			for (ObjectObjectCursor 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 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 source = Maps.newHashMap();
		Map 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,实际上要传进去的应该是Map>,所以当我们传进Map的时候就会失败。

你可能感兴趣的:(Database)