您的位置:首页 > 编程语言 > Java开发

Elasticsearch5.4 Java API操作

2017-09-13 19:38 567 查看
public class ClientFactory {

    
@SuppressWarnings({ "resource", "unchecked" })
public static Client transportClient() {
//创建client
TransportClient transportClient = null;
try {
//设置集群名称(配置信息)
Settings settings = Settings.builder()
.put("cluster.name", "elasticsearch")
.build();
//创建client(添加连接地址)
transportClient = new PreBuiltTransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.9.150"), 9300));
} catch (Exception e) {
e.printStackTrace();
}
return transportClient;
}    

}

===============================================================================================================

public class ElasticsearchCURD {

private Client client;

/**
* 创建一个实例。

* @param client
*/
public ElasticsearchCURD(Client client) {
this.client = client;
}

/***************** index ******************************/

/**
* 创建一个索引

* @param indexName
*            索引名
*/
public void createIndex(String indexName) {
try {
CreateIndexResponse indexResponse = this.client.admin().indices().prepareCreate(indexName).get();
// 生产环境下,一律换成 logger.info()
System.out.println(indexResponse.isAcknowledged()); // true表示创建成功
} catch (ElasticsearchException e) {
e.printStackTrace();
}
}

/**
* 给索引增加mapping。

* @param index
*            索引名
* @param type
*            mapping所对应的type
*/
public void addMapping(String index, String type) {
try {
// 使用XContentBuilder创建Mapping
XContentBuilder builder = XContentFactory.jsonBuilder().startObject().field("properties").startObject()
.field("name").startObject().field("index", "not_analyzed").field("type", "string").endObject()
.field("age").startObject().field("index", "not_analyzed").field("type", "integer").endObject()
.endObject().endObject();
System.out.println(builder.string());
PutMappingRequest mappingRequest = Requests.putMappingRequest(index).source(builder).type(type);
this.client.admin().indices().putMapping(mappingRequest).actionGet();
} catch (ElasticsearchException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

/**
* 删除索引

* @param index
*            要删除的索引名
*/
public void deleteIndex(String index) {
DeleteIndexResponse deleteIndexResponse = this.client.admin().indices().prepareDelete(index).get();
System.out.println(deleteIndexResponse.isAcknowledged()); // true表示成功
}

/******************** doc *************************************/

/**
* 创建一个文档

* @param index
*            index
* @param type
*            type
*/
public void createDoc(String index, String type, String id) {

try {
// 使用XContentBuilder创建一个doc source
XContentBuilder builder = XContentFactory.jsonBuilder().startObject().field("name", "zhangsan")
.field("age", 12).endObject();

IndexResponse indexResponse = this.client.prepareIndex().setIndex(index).setType(type).setId(id) // 如果没有设置id,则ES会自动生成一个id
.setSource(builder.string()).get();
// System.out.println(indexResponse.isCreated());
} catch (ElasticsearchException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

/**
* 更新文档

* @param index
* @param type
* @param id
*/
public void updateDoc(String index, String type, String id) {
try {
XContentBuilder builder = XContentFactory.jsonBuilder().startObject().field("name", "lisi").field("age", 12)
.endObject();

UpdateResponse updateResponse = this.client.prepareUpdate().setIndex(index).setType(type).setId(id)
.setDoc(builder.string()).get();
// System.out.println(updateResponse.isCreated()); // true表示成功
} catch (ElasticsearchException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

/**
* 删除一条数据

* @param index
* @param type
* @param id
*/
public void deleteDoc(String index, String type, String id) {

DeleteResponse deleteResponse = this.client.prepareDelete().setIndex(index).setType(type).setId(id).get();
// System.out.println(deleteResponse.isFound()); // true表示成功
}

/**
* 根据ID查询一条数据记录。

* @param id
*            要查询数据的ID。
* @return 返回查询出来的记录对象的json字符串。
*/
public String get(String index, String type, String id) {
GetResponse getResponse = this.client.prepareGet() // 准备进行get操作,此时还有真正地执行get操作。(与直接get的区别)
.setIndex(index) // 要查询的
.setType(type).setId(id).get();
return getResponse.getSourceAsString();
}

/**
* 使用min聚合查询某个字段上最小的值。

* @param index
* @param type
*/
public void min(String index, String type) {
SearchResponse response = this.client.prepareSearch(index)
.addAggregation(AggregationBuilders.min("min").field("age")).get();

InternalMin min = response.getAggregations().get("min");
System.out.println(min.getValue());
}

}

===============================================================================================================

public class ESTests {

String indexName = "index2";
String typeName = "string";
String idName = "1"; // 默认ID为1,可根据需要在各自方法内通过局部变量进行修改

/**
* 测试连接Elasticsearch
*/
@Test
public void testConn() {
ClientFactory clientFactory = new ClientFactory();

try {
// 搜索数据
GetResponse response = clientFactory.transportClient().prepareGet("index", "fulltext", "1").execute()
.actionGet();
// 输出结果
System.out.println(response.getSourceAsString());
// 关闭client
// clientFactory.transportClient().close();
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 增加(创建索引)
*/
@Test
public void testCreateIndex() {
ClientFactory clientFactory = new ClientFactory();
// 创建一个实例
ElasticsearchCURD elasticsearchCURD = new ElasticsearchCURD(clientFactory.transportClient());
elasticsearchCURD.createIndex(indexName);
}

/**
* 给索引增加mapping
*/
@Test
public void testAddMapping() {
ClientFactory clientFactory = new ClientFactory();
// 创建一个实例
ElasticsearchCURD elasticsearchCURD = new ElasticsearchCURD(clientFactory.transportClient());
elasticsearchCURD.addMapping(indexName, typeName);
}

/**
* 创建一个文档
*/
@Test
public void testCreateDoc() {
ClientFactory clientFactory = new ClientFactory();
// 创建一个实例
ElasticsearchCURD elasticsearchCURD = new ElasticsearchCURD(clientFactory.transportClient());
String idName = "2";
elasticsearchCURD.createDoc(indexName, typeName, idName);
}

/**
* 更新文档
*/
@Test
public void testUpdateDoc() {
ClientFactory clientFactory = new ClientFactory();
// 创建一个实例
ElasticsearchCURD elasticsearchCURD = new ElasticsearchCURD(clientFactory.transportClient());
elasticsearchCURD.updateDoc(indexName, typeName, idName);
}

/**
* 删除一条数据
*/
@Test
public void testDeleteDoc() {
ClientFactory clientFactory = new ClientFactory();
// 创建一个实例
ElasticsearchCURD elasticsearchCURD = new ElasticsearchCURD(clientFactory.transportClient());
elasticsearchCURD.deleteDoc(indexName, typeName, idName);
}

/**
* 根据ID查询一条数据记录(无返回--todo)
*/
@Test
public void testGetById() {
ClientFactory clientFactory = new ClientFactory();
// 创建一个实例
ElasticsearchCURD elasticsearchCURD = new ElasticsearchCURD(clientFactory.transportClient());
String idName = "2";
elasticsearchCURD.get(indexName, typeName, idName);
}

/**
* 使用min聚合查询某个字段上最小的值
*/
@Test
public void testMin() {
ClientFactory clientFactory = new ClientFactory();
// 创建一个实例
ElasticsearchCURD elasticsearchCURD = new ElasticsearchCURD(clientFactory.transportClient());
elasticsearchCURD.min(indexName, typeName);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: