您的位置:首页 > 大数据

大数据下的日志--ElasticSearch部分(三)--Bulk,Search操作

2015-10-05 19:33 477 查看
其实在上一篇博客中,只要大家能看懂,就应该能够根据其代码做到举一反三了,依次类推ES的批量操作Bulk,搜索功能Search等,但在这里还是简单讲一下。



批量索引和删除



Java代码 收藏代码

BulkRequestBuilder bulkRequest = client.prepareBulk();

for(int i=500;i<1000;i++){

//业务对象

String json = ESUtils.toJson(new LogModel());

IndexRequestBuilder indexRequest = client.prepareIndex("twitter", "tweet")

//指定不重复的ID

.setSource(json).setId(String.valueOf(i));

//添加到builder中

bulkRequest.add(indexRequest);

}



BulkResponse bulkResponse = bulkRequest.execute().actionGet();

if (bulkResponse.hasFailures()) {

// process failures by iterating through each bulk response item

System.out.println(bulkResponse.buildFailureMessage());

}

上面只是批量索引的方法,将client.prepareIndex改为client.prepareDelete就是批量删除操作。ES对批量操作作了优化,所以大家使用时,尽量将操作集中起来调用批量接口,速度会更快一些。





搜索(Search)

这里说的搜索仅仅是简单相等条件搜索,并没有涉及真正意义上的搜索。比如,我们要搜索前1000条记录,代码如下:



Java代码 收藏代码

SearchResponse response = client.prepareSearch("twitter")

//这个在prepareSearch中指定还不行,必须使用setTypes

.setTypes("tweet")

//设置查询条件,

.setFilter(FilterBuilders.matchAllFilter())

.setFrom(0).setSize(1000)

.execute()

.actionGet();

/**

* SearchHits是SearchHit的复数形式,表示这个是一个列表

*/

SearchHits shs = response.getHits();

for(SearchHit hit : shs){

System.out.println("id:"+hit.getId()+":"+hit.getSourceAsString());

}

client.close();

搜索有两种方法,一种是使用Filter进行搜索,一种是使用Query进行搜索,例如,想只搜索某个字段为具体值的数据,也可以这样写。





Java代码 收藏代码

Client client = ESUtils.getClient();

/**

* 创建查询条件,QueryBuilders相当于Hibernate的Restrictions,

* 而QueryBuilder则相当于一个Criteria,可以不停的增加本身对象

*/

BoolQueryBuilder query = QueryBuilders.boolQuery();

//systemName为字段名称,oa未字段值

query.must(QueryBuilders.termQuery("systemName", "oa"));

SearchResponse response = client.prepareSearch("twitter")

//这个在prepareSearch中指定还不行,必须使用setTypes

.setTypes("tweet")

//设置查询条件,

.setQuery(query)

.setFrom(0).setSize(60)

.execute()

.actionGet();

/**

* SearchHits是SearchHit的复数形式,表示这个是一个列表

*/

SearchHits shs = response.getHits();

for(SearchHit hit : shs){

System.out.println(hit.getSourceAsString());

}

client.close();





这些只是使用ES的传统用法,就是想用ES取代传统数据库的用法。但其实ES的主要目的并非如此,相信你使用搜索引擎也不是想做这些简单的查询和插入。排名,分词等更高级的用法,我也没有完全搞清楚,还望大家多多指教。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: