es的添加數據方法中 索引index字段不允許為大寫字符串,必須全部為小寫字符串
public void bulkCreatIndex(){
TransportClient client = es.getClient();
int i = 1;
// bulk單次批操作量
final int BatchSize = 10000;
BulkRequestBuilder bulkRequest = client.prepareBulk();
// 遍歷JSONArray,數據量龐大時,for循環比foreach循環效率更高一些
for (i = 1; i <= jsonArray.size(); i++) {
// setSource為上傳的文本文檔
bulkRequest.add(client.prepareIndex(index.toLowerCase(), type).setSource(jsonArray.getJSONObject(i-1).toString()));
// 每10000條數據執行一次bulk批量操作
if (0 == i % BatchSize) {
bulkRequest.execute().actionGet();
bulkRequest = client.prepareBulk();//此處是bulkRequest執行完成之后會重新創建一個bulkRequest避免下次提交出現重復的數據,如果是一次性全部提交可以不用使用此處
}
}
bulkRequest.execute().actionGet();
bulkRequest = client.prepareBulk();
}
查詢方法
public void search(){
Client client = esmanager.getClient();
RangeQueryBuilder rangequerybuilder = QueryBuilders.rangeQuery("startdate").from(startdate).to(enddate);//建立查詢是所使用條件startdate 從from startdate開始至enddate結束,
SearchRequestBuilder responsebuilder = client.prepareSearch(index).setTypes(type);//創建查詢使用方法
SearchResponse myresponse = responsebuilder
.setQuery(QueryBuilders.boolQuery().must(rangequerybuilder))//添加查詢條件
.setFrom(from).setSize(size).addSort("startdate", SortOrder.ASC) // 分頁 並且根據startdate進行排序
.setExplain(true).execute().actionGet();
SearchHits hits = myresponse.getHits();//searchhits 為查詢結果相當於jdbc中的ResultSet
for (int i = 0; i < hits.getHits().length; i++) {
hits.getHits()[i].getSourceAsMap().get(key)
}
根據業務進行方法的修改,本方法制作一個demo參考為主。
