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()
-
);
-
}