1、获取ElasticSearch client对象
public Client getEsClient(){
Client client = null;
try{
Settings settings = ImmutableSettings.settingsBuilder()
.put("client.transport.sniff", true) //自动嗅探整个ES集群节点
.put("client", true)
.put("data",false)
.put("cluster.name","elasticsearch") //设置集群名字
.put("number_of_shards", 2) //2个主分片
.put("index.refresh_interval", "5s") //每5秒提交一次数据,类似oracle中的commit
.build();
client = new TransportClient(settings).addTransportAddress(new InetSocketTransportAddress("hostName", 9200));
}catch(Exception ex){
ex.printStackTrace();
}
return client;
}
2、查询List方法
List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();
Client client = null;
try{
//获取Elasticsearch client对象
client = getEsClient();
//设置查询条件(类似sql中 eventid = eventid )
QueryBuilder qb = QueryBuilders.boolQuery().must(QueryBuilders.termQuery("eventid", eventid));
// 设置ES中 indexName 和 indexType,以及QueryBuilders 对象
SearchRequestBuilder requestBuilder = client.prepareSearch(EventBean.indexName)
.setTypes(EventBean.indexType)
.setQuery(qb);
//执行查询 (可以设置排序、分页)
SearchResponse actionGet = requestBuilder.addSort(SortBuilders.fieldSort("occurtime").order(SortOrder.DESC))
.setFrom((pageNum-1) * pageSize)
.setSize(pageNum * pageSize)
.execute().actionGet();
//遍历查询结果
if(actionGet != null){
SearchHits hits = actionGet.getHits();
if(hits != null && hits.getHits() != null){
Map<String, Object> hitMap = null;
for (SearchHit hit : hits.getHits()){
hitMap = hit.getSource();
if(hitMap == null || hitMap.size() <= 0){
continue;
}
dataList.add(hitMap );
}
}
}
}catch(Exception ex){
ex.printStackTrace();
}finally{
//关闭client
}
return dataList ;
3、查询总数方法
int rowTotal = 0;
Client client = null;
try{
//获取Elasticsearch client对象
client = getEsClient();
//设置查询条件 (类似sql中 title like '%searchtext%')
QueryBuilder qb = QueryBuilders.boolQuery().must(QueryBuilders.wildcardQuery("title", "*"+searchtext+"*"));
// 设置ES中 indexName 和 indexType,以及QueryBuilders 对象
CountRequestBuilder requestBuilder = client.prepareCount(EventBean.indexName)
.setTypes(EventBean.indexType)
.setQuery(qb);
// 查询动作
rowTotal = ConverUtils.Obj2int( requestBuilder.execute()
.actionGet().getCount(), 0);
}catch(Exception ex){
ex.printStackTrace();
}finally{
//关闭client
}
return rowTotal;
4、添加方法
boolean optFlag = false;
Client client = null;
try{
//获取Elasticsearch client对象
client = getEsClient();
//构造请求对象
BulkRequestBuilder bulkRequestBuilder = client.prepareBulk();
IndexRequestBuilder indexRequestBuilder = null;
//根据请求对象bodyList, 组织bulkRequestBuilder对象
String indexId = "";
Map<String, Object> bodyMap = null;
for (int count = 0; count < bodyList.size(); count++) {
bodyMap = bodyList.get(count);
if (bodyMap == null) {
break;
}
//组织索引对象id
indexId = ConverUtils.Obj2Str(bodyMap.get("id"), "");
indexRequestBuilder = client.prepareIndex(indexName, indexType).setId(indexId).setSource(bodyMap);
bulkRequestBuilder.add(indexRequestBuilder);
}
//批量更新执行
BulkResponse bulkResponse = bulkRequestBuilder.execute().actionGet();
if (bulkResponse.hasFailures()) {
optFlag = false;
} else {
optFlag = true;
}
}catch(Exception ex){
ex.printStackTrace();
}finally{
//关闭client
}
return optFlag ;
5、更新方法
boolean optFlag = false;
Client client = null;
try{
//获取Elasticsearch client对象
client = getEsClient();
//构造请求对象
BulkRequestBuilder bulkRequestBuilder = client.prepareBulk();
UpdateRequestBuilder updateRequestBuilder = null;
//根据请求对象cvdMap,组织索引对象
String indexId = getEsIndexId(client, ConverUtils.Obj2long(cvdMap.get("id"), 0L));
//获取索引(getEsIndexId)
updateRequestBuilder = client.prepareUpdate(indexName, indexType, indexId).setDoc(cvdMap);
bulkRequestBuilder.add(updateRequestBuilder);
//批量更新执行
BulkResponse bulkResponse = bulkRequestBuilder.setRefresh(true).execute().actionGet();
if (bulkResponse.hasFailures()) {
optFlag = false;
} else {
optFlag = true;
}
}catch(Exception ex){
ex.printStackTrace();
}finally{
//关闭client
}
return optFlag ;
6、删除方法
boolean optFlag = false;
Client client = null;
try{
//获取Elasticsearch client对象
client = getEsClient();
//根据id_array数组, 组织索引对象
BulkRequestBuilder bulkRequestBuilder = client.prepareBulk();
DeleteRequestBuilder deleteRequestBuilder = null;
for(int i=0; i<id_array.length; i++){
if(id_array[i] == null || id_array[i].trim().equals("")){
continue;
}
//根据indexName, indexType, indexId进行删除(这里nfa_dictionary索引中ID字段值和ES自有_id值相同, 可以操作)
deleteRequestBuilder = client.prepareDelete(indexName, indexType, id_array[i]);
bulkRequestBuilder.add(deleteRequestBuilder.request());
}
//进行批量删除操作
BulkResponse bulkResponse = bulkRequestBuilder.execute().actionGet();
if (bulkResponse.hasFailures()) {
optFlag = false;
}else {
optFlag = true;
}
}catch(Exception ex){
ex.printStackTrace();
}finally{
//关闭client
}
return optFlag ;
其它:
public static void main(String[] args) throws Exception{
searchmethod6();
}
/**
* 方法一
* @throws Exception
*/
public static void searchmethod1() throws Exception{
TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("106.14.112.215"), 9300));
SearchResponse response = client.prepareSearch("movies").setTypes("movie").get();
println(response);
for (SearchHit searchHit: response.getHits()) {
println(searchHit);
}
}
/**
* 方法二
* @throws Exception
*/
public static void searchmethod2() throws Exception{
TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("106.14.112.215"), 9300));
QueryBuilder qb1 = termQuery("user","10");
// QueryBuilder qb2 = QueryBuilders.multiMatchQuery("git", "title", "content");
SearchResponse response = client.prepareSearch("movies").setQuery(qb1).get();
for (SearchHit searchHit: response.getHits()) {
println(searchHit);
}
}
/**
* 方法三
* @throws Exception
* 这个相当于之前的分页,使用的是Scroll方法
*/
public static void searchmethod3() throws Exception{
TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("106.14.112.215"), 9300));
QueryBuilder qb = termQuery("user", "kimchy");
SearchResponse scrollResp = client.prepareSearch("movies")
.addSort(FieldSortBuilder.DOC_FIELD_NAME, SortOrder.ASC)
.setScroll(new TimeValue(60000))
.setQuery(qb)
.setSize(1).get();
do {
for (SearchHit hit : scrollResp.getHits().getHits()) {
println(hit);
}
scrollResp = client.prepareSearchScroll(scrollResp.getScrollId()).setScroll(new TimeValue(60000)).execute().actionGet();
} while(scrollResp.getHits().getHits().length != 0);
}
/**
* 方法四
* @throws Exception
*/
public static void searchmethod4() throws Exception{
TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("106.14.112.215"), 9300));
SearchRequestBuilder srb1 = client.prepareSearch().setQuery(QueryBuilders.queryStringQuery("kimchy"));
SearchRequestBuilder srb2 = client.prepareSearch().setQuery(QueryBuilders.matchQuery("user", "kimchy"));
MultiSearchResponse sr = client.prepareMultiSearch().add(srb1).add(srb2).get();
for (MultiSearchResponse.Item item : sr.getResponses()) {
SearchResponse response = item.getResponse();
for (SearchHit searchHit : response.getHits()) {
println(searchHit);
}
}
}
/**
* 方法五
* 这个方法先欠着,不是很懂
* @throws Exception
*/
public static void searchmethod5() throws Exception{
TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("106.14.112.215"), 9300));
SearchResponse sr = client.prepareSearch()
.setQuery(QueryBuilders.matchAllQuery())
.addAggregation(
AggregationBuilders.terms("agg1").field("field")
)
.addAggregation(
AggregationBuilders.dateHistogram("agg2")
.field("birth")
.dateHistogramInterval(DateHistogramInterval.YEAR)
)
.get();
// Get your facet results
Terms agg1 = sr.getAggregations().get("agg1");
// DateHistogram agg2 = sr.getAggregations().get("agg2");
}
/**
* 方法六
* 能运行,但是就是不知道为什么查询不到结果,同时感觉这种方法很鸡肋,感觉写起来很麻烦,顺便说一下这个东西好像也可以在script下配置,我测试失败,但是感觉没什么用,就不深究了。
* https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-search-template.html
* @throws Exception
*/
public static void searchmethod6() throws Exception{
TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("106.14.112.215"), 9300));
Map<String, Object> json = new HashMap<>();
json.put("param_gender", "1962");
SearchResponse response = new SearchTemplateRequestBuilder(client)
.setScript("{\n" +
" \"query\" : {\n" +
" \"match\" : {\n" +
" \"year\" : \"{{param_gender}}\"\n" +
" }\n" +
" }\n" +
"}")
.setScriptType(ScriptType.INLINE)
.setScriptParams(json)
.setRequest(new SearchRequest())
.get()
.getResponse();
println(response);
System.out.println(response.getHits().getTotalHits());
for (SearchHit searchHit : response.getHits()) {
println(searchHit);
}
}
/**
* 输出结果SearchResponse
* @param response
*/
public static void println(SearchResponse response){
System.err.println("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-");
System.err.println(
"getFailedShards : " + response.getFailedShards() + "\n" +
"getNumReducePhases : " + response.getNumReducePhases() + "\n" +
"getScrollId : " + response.getScrollId() + "\n" +
"getTookInMillis : " + response.getTookInMillis() + "\n" +
"getTotalShards : " + response.getTotalShards() + "\n" +
"getAggregations : " + response.getAggregations() + "\n" +
"getProfileResults : " + response.getProfileResults() + "\n" +
"getShardFailures : " + response.getShardFailures() + "\n" +
"getSuggest : " + response.getSuggest() + "\n" +
"getTook : " + response.getTook() + "\n" +
"isTerminatedEarly : " + response.isTerminatedEarly() + "\n" +
"isTimedOut : " + response.isTimedOut() + "\n" +
"remoteAddress : " + response.remoteAddress() + "\n" +
"status : " + response.status() + "\n" +
"getHits : " + response.getHits()
);
}
/**
* 输出结果SearchResponse
* @param response
*/
public static void println(SearchHit searchHit){
System.err.println("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-");
System.err.println(
"docId : " + searchHit.docId() + "\n" +
"getId : " + searchHit.getId() + "\n" +
"getIndex : " + searchHit.getIndex()+ "\n" +
"getScore : " + searchHit.getScore() + "\n" +
"getSourceAsString : " + searchHit.getSourceAsString() + "\n" +
"getType : " + searchHit.getType() + "\n" +
"getVersion : " + searchHit.getVersion() + "\n" +
"fieldsOrNull : " + searchHit.fieldsOrNull() + "\n" +
"getExplanation : " + searchHit.getExplanation() + "\n" +
"getFields : " + searchHit.getFields() + "\n" +
"highlightFields : " + searchHit.highlightFields() + "\n" +
"hasSource : " + searchHit.hasSource()
);
}