Elasticsearch Java API

来源:互联网 发布:python解析日志文件 编辑:程序博客网 时间:2024/06/15 23:39
package org.xliang.elasticsearch;


import java.net.InetAddress;
import java.util.LinkedHashMap;
import java.util.Map;


import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexResponse;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.index.IndexRequest.OpType;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortOrder;


public class Elasticsearch {
//ip地址
private static final String ipAddress = "192.168.5.1";
//端口号
private static final int port = 9300;
//index 索引库(先当于数据库中的数据库名称)
private static final String index = "jqrj";
//type 类型
private static final String type = "jtsb";

public static void main(String[] args) {
Client client = null;
try {
client = getClient();
//recreateIndex(client);
//deleteIndexByIndexName(client,"test3");
//addDataToIndex(client);
//searchAll(client);
searchKeyWord(client, "java");
} finally{
client.close();
}
}

@SuppressWarnings("unused")
private static Client getClient(){
Client client = null;
try {
client = TransportClient.builder().build().addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(ipAddress),port));
} catch (Exception e) {
e.printStackTrace();
}
return client;
}


/**
* 该方法表示重新创建索引,首先判断是否包含指定的索引,如果有,则先删除,然后添加,如果没有,则直接添加。
* @param client
*/
private static void recreateIndex(Client client) {
if(client.admin().indices().prepareExists(index).execute().actionGet().isExists()){
DeleteIndexResponse deleteIndexResponse = client.admin().indices().delete(new DeleteIndexRequest(index)).actionGet();
if(deleteIndexResponse.isAcknowledged()){
System.out.println("删除索引完毕,接下来进入重新添加索引");
}
}
System.out.println("添加索引中。。。");
CreateIndexResponse createIndexResponse = client.admin().indices().prepareCreate(index).execute().actionGet();
if(createIndexResponse.isAcknowledged()){
System.out.println("添加索引完毕!!!");
}

}

/**
* 删除索引,根据索引名称
* @param string
*/
private static void deleteIndexByIndexName(Client client,String indexName) {
if(client.admin().indices().prepareExists(indexName).execute().actionGet().isExists()){
DeleteIndexResponse deleteIndexResponse = client.admin().indices().delete(new DeleteIndexRequest(indexName)).actionGet();
if(deleteIndexResponse.isAcknowledged()){
System.out.println("删除"+ indexName +"索引完毕!!!");
}
}

}

/**
* 添加数据到索引
* @param client
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
private static void addDataToIndex(Client client) {
Map s11 = new LinkedHashMap();
s11.put("title", "Think in java");
s11.put("origin", "美国");
s11.put("description", "初级java开发人员必读的书");
s11.put("author", "Bruce Eckel");
s11.put("price", 108);


Map s12 = new LinkedHashMap();
s12.put("title", "Head First Java");
s12.put("origin", "英国");
s12.put("description", "java入门教材");
s12.put("author", "Kathy Sierra");
s12.put("price", 54);


Map s21 = new LinkedHashMap();
s21.put("title", "Design Pattern");
s21.put("origin", "法国");
s21.put("description", "程序员不得不读的设计模式");
s21.put("author", "Kathy Sierra");
s21.put("price", 89);


Map s22 = new LinkedHashMap();
s22.put("title", "黑客与画家");
s22.put("origin", "法国");
s22.put("description", "读完之后脑洞大开");
s22.put("author", "Paul Graham");
s22.put("price", 35);

Map s31 = new LinkedHashMap();
s31.put("title", "Elasticsearch学习");
s31.put("origin", "中华人民共和国");
s31.put("description", "分布式搜索");
s31.put("author", "xuhaiyang");
s31.put("price", 86);
BulkResponse bulkResponse = client
.prepareBulk()
.add(client.prepareIndex(index, type).setId("11").setSource(s11).setOpType(OpType.INDEX).request())
.add(client.prepareIndex(index, type).setId("12").setSource(s12).setOpType(OpType.INDEX).request())
.add(client.prepareIndex(index, type).setId("21").setSource(s21).setOpType(OpType.INDEX).request())
.add(client.prepareIndex(index, type).setId("22").setSource(s22).setOpType(OpType.INDEX).request())
.add(client.prepareIndex(index, type).setId("31").setSource(s31).setOpType(OpType.INDEX).request())
.execute().actionGet();
if (bulkResponse.hasFailures()) {
System.err.println("index docs ERROR:" + bulkResponse.buildFailureMessage());
} else {
System.out.println("index docs SUCCESS:" + bulkResponse);
}

}

/**
* 查询所有的document
* @param client
*/
private static void searchAll(Client client) {
SearchResponse searchResponse = client.prepareSearch(index)
                             .setQuery(QueryBuilders.matchAllQuery())
                             .setTypes(type)
                             .setSize(10000)
                             .setScroll(TimeValue.timeValueMinutes(8))
                             .execute()
                             .actionGet();
SearchHits hits = searchResponse.getHits();
for(SearchHit hit : hits ){
System.out.println(hit.getSource());
}

}

/**
* 通过关键字查询结果
* @param client
*/
private  static void searchKeyWord(Client client,String keyWord){
SearchResponse response = client.prepareSearch(index)
.setQuery(QueryBuilders.matchQuery("_all", keyWord ))
.execute()
.actionGet();
System.out.println("通过关键字"+ keyWord +"查询完毕!!!");
}

/**
* 数值范围过滤
* @param client
*/
private static void searchRange(Client client,String fieldName,int rangeValue){
// SearchResponse response = client.prepareSearch(index)
// .setQuery(QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), QueryBuilders.rangeQuery("price").gt(80))).execute().actionGet();
SearchResponse response = client.prepareSearch(index)
                               .setQuery(QueryBuilders.matchAllQuery())
                               .setPostFilter(QueryBuilders.rangeQuery("price").gt(80))
                               .execute()
                               .actionGet();
System.out.println(fieldName + "数值范围过滤完毕");
}

/**
* 搜索并排序
* @param client
*/
private static void searchOrdered(Client client,String fieldName){
SearchResponse response = client.prepareSearch(index)
                       .setQuery(QueryBuilders.matchAllQuery())
                       .addSort(SortBuilders.fieldSort(fieldName).order(SortOrder.DESC))
                       .execute().actionGet();
System.out.println("通过字段"+ fieldName +"搜索完毕");
}

/**
* 高亮字段查询完毕
* @param client
* @param keyWord
* @param highlightedFieldArgs
*/
private static void searchHightlight(Client client,String keyWord,String... highlightedFieldArgs){
SearchResponse response = client.prepareSearch(index)
                       .setQuery(QueryBuilders.matchQuery("_all", keyWord))
                       .addHighlightedField(highlightedFieldArgs[0])
        .addHighlightedField(highlightedFieldArgs[1])
        .execute()
        .actionGet();
System.out.println("高亮查询完毕");
}



}
原创粉丝点击