Elasticsearch简单使用系列--使用Java API进行CRUD操作

1.简单介绍Elasticsearch和RDBMS对应的关系,便于记忆理解
ElasticsearchRDBMS
indexdatabase
type/mappingtable
document/objectrow/record
fieldcolumn
2.封装一个获取client的工具类

/**
 * @author lcj
 * @version 1.0
 * @description 获取client
 * @Create 2017-06-19
 */
public  class TransportClientUtil {

    public static TransportClient getTransportClient(){
        Settings settings = Settings.builder()
                .put("cluster.name","es-cluster") //设置集群的名字,默认是elasticsearch
                .put("client.transport.sniff",true) //启用监听器,每5秒刷新一次nodes
                .build();
        TransportClient client = null;
        try {
            client = new PreBuiltTransportClient(settings)
            //设置node
            //.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(System.getenv("COMPUTERNAME")),9300));
            .addTransportAddress(new InetSocketTransportAddress(InetAddress.getLocalHost(),9300));
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
        return client;
    }
}
3.使用java api进行CRUD

/**
 * @author lcj
 * @version 1.0
 * @description 使用java api操作es node,进行简单的crud
 * @Create 2017-06-22
 */
public class EsJavaApi {

    private static final Logger LOGGER = LoggerFactory.getLogger(EsJavaApi.class);

    private static TransportClient client = TransportClientUtil.getTransportClient();

    public static void main(String[] args) {
        //创建索引文档
        //save();

        //搜索文档
        //get();

        //更新文档
        //update();

        //删除文档
        delete();

        //关闭链接
        client.close();

    }

    /**
     * pojo bean ,创建index 文档
     */
    private static void save(){
        Book book = new Book();
        book.setName("jvm 虚拟机5");
        book.setAuthor("lcj4");
        book.setPublishTime(new Date().toString());
        book.setPrice(512.10);
        book.setId("17");

        ObjectMapper mapper = new ObjectMapper();
        try {
            byte[] bytes = mapper.writeValueAsBytes(book);
            IndexResponse response = client.prepareIndex("book","book",book.getId())
                    .setSource(bytes)
                    .get();

            System.out.println(response.getResult()); //CREATED
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }

    /**
     * 根据id,搜索文档
     */
    private static void get(){
        GetResponse response = client.prepareGet("book","book","17")
                .setOperationThreaded(false) //默认为true,在不同的线程执行
                .get();

        //{"id":"17","name":"jvm 虚拟机5","author":"lcj4","price":512.1,"publishTime":"Thu Jun 22 13:36:49 CST 2017"}
        System.out.println(response.getSourceAsString());

    }


    /**
     * 更新文档
     */
    private static void update(){
        UpdateRequest updateRequest = new UpdateRequest();
        //指定索引
        updateRequest.index("book");
        //指定类型
        updateRequest.type("book");
        //指定id
        updateRequest.id("17");

        Book book = new Book();
        book.setName("jvm 虚拟机55");
        book.setAuthor("lcj4");
        book.setPublishTime(DateFormatUtils.format(new Date(),"yyyy-MM-dd HH:mm:ss"));
        book.setPrice(512.18);
        book.setId("17");

        ObjectMapper mapper = new ObjectMapper();

        //有很多重载方法
        //{"_index":"book","_type":"book","_id":"17","_version":2,"found":true,"_source":{"id":"17","name":"jvm 虚拟机55","author":"lcj4","price":512.18,"publishTime":"2017-06-22 13:45:22"}}
        try {
            updateRequest.doc(mapper.writeValueAsBytes(book));
            client.update(updateRequest).get();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /*根据id删除文档*/
    private static void delete(){
        DeleteResponse response = client.prepareDelete("book","book","17")
                .get();
        //DeleteResponse[index=book,type=book,id=17,version=3,result=deleted,shards=ShardInfo{total=2, successful=1, failures=[]}]
        System.out.println(response);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值