美文网首页
二、ElasticSearch 使用java接口创建索引及操作文

二、ElasticSearch 使用java接口创建索引及操作文

作者: 缘木与鱼 | 来源:发表于2020-09-27 14:25 被阅读0次

ElasticSearch (2)使用java接口创建索引及操作文档

所有Elasticsearch操作都是使用Client对象执行的。Client 定义的所有API都是异步执行的(要么使用事件监听器回调或者使用Future模式)。此外,客户端上的操作可以批量累积和执行。

Elasticsearch官方计划在Elasticsearch 7.0中弃TransportClient,并在8.0中完全删除它。故,应该使用Java高级REST client,rest client执行HTTP请求来执行操作,无需再序列化的Java请求。Java高级REST Client API目前支持更常用的api,但还需要添加更多的api。

1、连接ElasticSearch

新建一个maven项目,在pom.xml文件中添加依赖: (注意版本对应)

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>transport</artifactId>
    <version>5.5.2</version>
</dependency>

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.2</version>
</dependency>

连接的代码:

package com.asiainfo.test;

import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;

import java.net.InetAddress;

public class ConnTest {

    // elasticsearch的端口和ip
    private static String host = "10.21.13.48";
    private static int port = 9300;

    public static void main(String[] args) throws Exception {
        @SuppressWarnings({ "resource", "unchecked" })
        TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(host), port));
        System.out.println(client);
        client.close();
    }

}

输出:

ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...
org.elasticsearch.transport.client.PreBuiltTransportClient@783f6c

前面的 ERROR 是没有配置 Log4j2 的问题。

2、创建索引、并操作文档

import com.google.gson.JsonObject;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexResponse;
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.XContentType;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.net.InetAddress;

/**
 * @author: LIJY
 * @Description: ElasticSearch客户端连接服务器测试
 * @Date: 2020/9/25 21:26
 */
public class IndexTest {

    private static String host = "10.21.13.48";
    private static int port = 9300;

    private TransportClient client = null;

    /**
     * 获取连接
     * @throws Exception
     */
    @SuppressWarnings({"resource", "unchecked"})
    @Before
    public void getClient() throws Exception {
        client = new PreBuiltTransportClient(Settings.EMPTY)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(host), port));
    }

    /**
     * 关闭连接
     */
    @After
    public void close() {
        if (client != null) {
            client.close();
        }
    }


    /**
     * 创建索引、 添加文档
     * @throws Exception
     */
    @Test
    public void testIndex() throws Exception {
        JsonObject object = new JsonObject();
        object.addProperty("name", "java think");
        object.addProperty("price", 100.0);
        object.addProperty("date", "2015-09-14");

        IndexResponse indexResponse = client.prepareIndex("book", "java", "1")
                .setSource(object.toString(), XContentType.JSON).get();
        System.out.println("索引名称:" + indexResponse.getIndex());
        System.out.println("类型:" + indexResponse.getType());
        System.out.println("文档ID:" + indexResponse.getId());
        System.out.println("当前实例状态:" + indexResponse.status());
    }

    /**
     * 根据id获取文档
     * ElasticSearch提供了根据索引名称,类别,文档ID来获取数据
     * @throws Exception
     */
    @Test
    public void testGet() throws Exception {
        GetResponse fields = client.prepareGet("book", "java", "1").get();
        System.out.println(fields.getSourceAsString());
    }

    /**
     * 根据id修改文档
     * ElasticSearch提供了根据索引名称,类别,文档ID来修改数据,修改的设置数据可以是Map,Json串,自带工具。
     * 实际开发一般用Json
     * @throws Exception
     */
    @Test
    public void testUpdate() throws Exception {
        JsonObject object = new JsonObject();
        object.addProperty("name", "python doc");
        object.addProperty("price", 99.99);
        object.addProperty("date", "2020-09-14");

        UpdateResponse response = client.prepareUpdate("book", "java", "1")
                .setDoc(object.toString(), XContentType.JSON).get();
        System.out.println("索引名称:" + response.getIndex());
        System.out.println("类型:" + response.getType());
        System.out.println("文档ID:" + response.getId());
        System.out.println("当前实例状态:" + response.status());
    }

    /**
     * 根据id删除文档
     * ElasticSearch提供了根据索引名称,类别,文档ID来删除数据
     * @throws Exception
     */
    @Test
    public void testDelete() throws Exception {
        DeleteResponse response = client.prepareDelete("book", "java", "1").get();
        System.out.println("索引名称:" + response.getIndex());
        System.out.println("类型:" + response.getType());
        System.out.println("文档ID:" + response.getId());
        System.out.println("当前实例状态:" + response.status());
    }

}

相关文章

网友评论

      本文标题:二、ElasticSearch 使用java接口创建索引及操作文

      本文链接:https://www.haomeiwen.com/subject/ymxluktx.html