获取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>的时候就会失败。