博客信息

Java操作elasticsearch

发布时间:『 2019-10-11 21:08』  博客类别:索引框架  阅读(790)


java操作ElasticSearch之创建客户端连接

pom依赖

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <maven.compiler.source>1.7</maven.compiler.source>
  <maven.compiler.target>1.7</maven.compiler.target>

  <slf4j.version>1.7.7</slf4j.version>
  <log4j2.version>2.9.1</log4j2.version>
  <disruptor.version>3.2.0</disruptor.version>
  <junit.version>4.12</junit.version>
  <javax.servlet.version>4.0.0</javax.servlet.version>
  <jstl.version>1.2</jstl.version>
  <standard.version>1.1.2</standard.version>
  <tomcat-jsp-api.version>8.0.47</tomcat-jsp-api.version>
</properties>

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

  <!-- log配置:Log4j2 + Slf4j -->
  <!-- slf4j核心包 -->
  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>${slf4j.version}</version>
  </dependency>
  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>${slf4j.version}</version>
    <scope>runtime</scope>
  </dependency>

  <!--用于与slf4j保持桥接 -->
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>${log4j2.version}</version>
  </dependency>

  <!--核心log4j2jar包 -->
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>${log4j2.version}</version>
  </dependency>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>${log4j2.version}</version>
  </dependency>

  <!--web工程需要包含log4j-web,非web工程不需要 -->
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-web</artifactId>
    <version>${log4j2.version}</version>
    <scope>runtime</scope>
  </dependency>
  <!--需要使用log4j2的AsyncLogger需要包含disruptor -->
  <dependency>
    <groupId>com.lmax</groupId>
    <artifactId>disruptor</artifactId>
    <version>${disruptor.version}</version>
  </dependency>
  <!-- 5、other -->
  <!-- 5.1、junit -->
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>${junit.version}</version>
    <scope>test</scope>
  </dependency>

  <!-- 5.2、servlet -->
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>${javax.servlet.version}</version>
    <scope>provided</scope>
  </dependency>

  <!-- 5.3、jstl、standard -->
  <dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>${jstl.version}</version>
  </dependency>
  <dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>${standard.version}</version>
  </dependency>

  <!-- 5.4、tomcat-jsp-api -->
  <dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-jsp-api</artifactId>
    <version>${tomcat-jsp-api.version}</version>
  </dependency>

</dependencies>


代码如下

package com.javaxl.elasticsearch;

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;

/**
 * @author 小李飞刀
 * @site www.javaxl.com
 * @company
 * @create  2019-10-11 23:36
 * 讲解Java操作ElasticSearch之创建客户端连接
 */
public class Demo1 {
    private static String host="192.168.195.128"; // 服务器地址
    private static int port=9300; // 端口(注意:这里是9300不是9200,Java连接elasticsearch是9300)

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


结果如下

小李飞刀_elasticsearch

Java操作ElasticSearch之创建索引

ElasticSearch客户端提供了多种方式的数据创建方式,包括json串,map,内置工具;我们正式开始一般用json格式,借助json工具框架,比如gson ,json-lib,fastjson等等;

 

Pom依赖

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


相关代码

package com.javaxl.elasticsearch;

import com.google.gson.JsonObject;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentFactory;
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;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * @author 小李飞刀
 * @site www.javaxl.com
 * @company
 * @create  2019-10-11 23:51
 *
 * 构建索引
 */
public class Demo2 {
    private static String host="192.168.195.128"; // 服务器地址
    private static int port=9300; // 端口(注意:这里是9300不是9200,Java连接elasticsearch是9300)

    private TransportClient client=null;

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

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

    /**
     * 添加索引
     */
    @Test
    public void testIndex()throws Exception{
        IndexResponse response =client.prepareIndex("twitter", "tweet", "1")
                .setSource(XContentFactory.jsonBuilder()
                        .startObject()
                        .field("user", "kimchy")
                        .field("postDate", new Date())
                        .field("message", "trying out Elasticsearch")
                        .endObject()
                )
                .get();
        System.out.println("索引名称:"+response.getIndex());
        System.out.println("类型:"+response.getType());
        System.out.println("文档ID:"+response.getId()); 
        System.out.println("当前实例状态:"+response.status());
    }

    /**
     * 添加索引
     */
    @Test
    public void testIndex2()throws Exception{
        String json = "{" +
                "\"user\":\"kimchy\"," +
                "\"postDate\":\"2013-01-30\"," +
                "\"message\":\"trying out Elasticsearch\"" +
                "}";

        IndexResponse response =client.prepareIndex("weibo", "tweet")
                .setSource(json,XContentType.JSON)
                .get();
        System.out.println("索引名称:"+response.getIndex());
        System.out.println("类型:"+response.getType());
        System.out.println("文档ID:"+response.getId()); 
        System.out.println("当前实例状态:"+response.status());
    }

    /**
     * 添加索引(推荐)
     */
    @Test
    public void testIndex3()throws Exception{
        Map<String, Object> json = new HashMap<String, Object>();
        json.put("user","kimchy");
        json.put("postDate",new Date());
        json.put("message","trying out Elasticsearch");

        IndexResponse response =client.prepareIndex("qq", "tweet")
                .setSource(json)
                .get();
        System.out.println("索引名称:"+response.getIndex());
        System.out.println("类型:"+response.getType());
        System.out.println("文档ID:"+response.getId()); 
        System.out.println("当前实例状态:"+response.status());
    }

    /**
     * 添加索引(推荐)
     */
    @Test
    public void testIndex4()throws Exception{
        JsonObject jsonObject=new JsonObject();
        jsonObject.addProperty("user", "kimchy");
        jsonObject.addProperty("postDate", "1989-11-11");
        jsonObject.addProperty("message", "trying out Elasticsearch");

        IndexResponse response =client.prepareIndex("qq", "tweet")
                .setSource(jsonObject.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());
    }
}


小李飞刀_elasticsearch


小李飞刀_elasticsearch

 

 Java操作ElasticSearch只Get数据

ElasticSearch提供了根据索引名称,类别,文档ID来获取数据

@Test
public void testGet(){
    GetResponse getResponse=client.prepareGet("qq", "tweet", "AW27kGdKTaHvtyXntOp6").get();
    System.out.println(getResponse.getSourceAsString());
}


小李飞刀_elasticsearch

 

Java操作ElasticSearch之Update数据

相关代码如下

@Test
public void testUpdate(){
    JsonObject jsonObject=new JsonObject();
    jsonObject.addProperty("user", "小李飞刀");
    jsonObject.addProperty("postDate", "2019-10-11");
    jsonObject.addProperty("message", "学习Elasticsearch");

    UpdateResponse response = client.prepareUpdate("qq", "tweet", "AW27kGdKTaHvtyXntOp6").setDoc(jsonObject.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());
}


执行更新索引方法

小李飞刀_elasticsearch


再次获取索引值

小李飞刀_elasticsearch

 

Java操作ElasticSearch之Delete数据

ElasticSearch提供了根据索引名称,类别,文档ID来删除数据

相关代码如下

@Test
public void testDelete(){
    DeleteResponse response=client.prepareDelete("qq", "tweet", "AW27kGdKTaHvtyXntOp6").get();
    System.out.println("索引名称:"+response.getIndex());
    System.out.println("类型:"+response.getType());
    System.out.println("文档ID:"+response.getId()); 
    System.out.println("当前实例状态:"+response.status());
}


执行删除索引方法

小李飞刀_elasticsearch

再次去获取索引

小李飞刀_elasticsearch


over......


关键字:     索引框架       elasticsearch  

备案号:湘ICP备19000029号

Copyright © 2018-2019 javaxl晓码阁 版权所有