下面使用的代码使用的索引和类型请参考上一篇博客Elasticsearch 使用命令操作索引
普通java项目
1、新建Maven工程 pom文件依赖
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>5.5.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.9</version>
</dependency>
</dependencies>
2、配置文件
增加一个日志文件 log4j2.properties
内容为:
appender.console.type = Console
appender.console.name = console
appender.console.layout.type = PatternLayout
rootLogger.level = info
rootLogger.appenderRef.console.ref = console
3、使用的Java类为
Category.java类
package com.szc.model;
/**
* 产品分类
* @author Administrator
*
*/
public class Category {
private String productPlanId;
private String id;
private String name;
private String parentId;
public String getProductPlanId() {
return productPlanId;
}
public void setProductPlanId(String productPlanId) {
this.productPlanId = productPlanId;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getParentId() {
return parentId;
}
public void setParentId(String parentId) {
this.parentId = parentId;
}
public Category() {
super();
}
public Category(String productPlanId, String id, String name, String parentId) {
super();
this.productPlanId = productPlanId;
this.id = id;
this.name = name;
this.parentId = parentId;
}
@Override
public String toString() {
return "Category [productPlanId=" + productPlanId + ", id=" + id + ", name=" + name + ", parentId=" + parentId
+ "]";
}
}
ProductPlan.java类
package com.szc.model;
import java.util.List;
/**
* 产品计划类
* @author Administrator
*
*/
public class ProductPlan {
private String id;
private String name;
private String desc;
private float price;
private List<Category> categorys;
private String productId;
private String productName;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
public List<Category> getCategorys() {
return categorys;
}
public void setCategorys(List<Category> categorys) {
this.categorys = categorys;
}
public String getProductId() {
return productId;
}
public void setProductId(String productId) {
this.productId = productId;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public ProductPlan() {
super();
}
public ProductPlan(String id, String name, String desc, float price, List<Category> categorys, String productId,
String productName) {
super();
this.id = id;
this.name = name;
this.desc = desc;
this.price = price;
this.categorys = categorys;
this.productId = productId;
this.productName = productName;
}
@Override
public String toString() {
return "ProductPlan [id=" + id + ", name=" + name + ", desc=" + desc + ", price=" + price + ", categorys="
+ categorys + ", productId=" + productId + ", productName=" + productName + "]";
}
}
ElasticJavaClient类
package com.szc.client;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.szc.model.Category;
import com.szc.model.ProductPlan;
public class ElasticJavaClient {
public TransportClient getClient() throws UnknownHostException{
Settings settings=Settings.builder().put("cluster.name","wali").build();
TransportClient client=new PreBuiltTransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.254.128"),9300))
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.254.129"),9300));
return client;
}
/**
* 添加一个文档
* @param client
* @throws JsonProcessingException
*/
@SuppressWarnings("deprecation")
public void addIndex(TransportClient client) throws JsonProcessingException{
List<Category> categorys=new ArrayList<>();
Category category1=new Category("111", "123", "意外险", null);
Category category2=new Category("111", "126", "财产险", "0");
Collections.addAll(categorys, category1,category2);
ProductPlan plan=new ProductPlan("001", "成人综合保险", "全面保障你的财产安全", 3300, categorys, "111", null);
ObjectMapper mapper =new ObjectMapper();
String json=mapper.writeValueAsString(plan);
IndexResponse response=client.prepareIndex("product", "product_plan").setSource(json).get();
System.out.println(response.status().getStatus());
//创建成功 反会的状态码是201
if(response.status().getStatus()==201){
System.out.println(response.getId());
}
}
/**
* 查询一个文档
* @param client
* @throws Exception
*/
public void getIndex(TransportClient client) throws Exception{
GetResponse response=client.prepareGet("product", "product_plan","AWG4BHScpkaDOYy0S6LV").get();
System.out.println("1: \n "+response.getSource());
//得到的是Map类型的结果
Map<String,Object> map=response.getSource();
map.forEach((k, v) -> System.out.println("key:value = " + k + ":" + v));
ObjectMapper mapper =new ObjectMapper();
//得到Json类型的结果 可以转成对象
ProductPlan plan=mapper.readValue(response.getSourceAsString(), ProductPlan.class);
System.out.println(plan.getCategorys()+"\n "+plan.getId());
}
/**
* 删除一个文档
* @param client
*/
public void deleteIndex(TransportClient client){
DeleteResponse response=client.prepareDelete("product", "product_plan","AWG4AgRIWB5UoIZiLx5h").get();
if(response.status().getStatus()==200){
System.out.println("删除成功");
}
}
/**
* 更新
* @param client
* @throws Exception
*/
public void updateIndex(TransportClient client) throws Exception{
//方案一 使用对象进行更新的话 如果对象中值为空的属性 都会被更新为null 数值更新为0
/* ProductPlan plan=new ProductPlan();
plan.setName("成人");
ObjectMapper mapper =new ObjectMapper();
String json=mapper.writeValueAsString(plan);
*/
//方案二 开始 更新需要更新的属性
XContentBuilder json=XContentFactory.jsonBuilder();
json.startObject().field("id","005").field("name","成人意外保险").field("price",6000).endObject();
//方案二 结束
UpdateRequest updateRequest=new UpdateRequest("product", "product_plan","AWG4A4gypkaDOYy0S6LU").doc(json);
UpdateResponse response=client.update(updateRequest).get();
if(response.status().getStatus()==200){
System.out.println("更新成功");
}
}
public static void main(String[] args) throws Exception {
ElasticJavaClient elasticJavaClient=new ElasticJavaClient();
//elasticJavaClient.addIndex(elasticJavaClient.getClient());
//elasticJavaClient.getIndex(elasticJavaClient.getClient());
//elasticJavaClient.deleteIndex(elasticJavaClient.getClient());
elasticJavaClient.updateIndex(elasticJavaClient.getClient());
}
}