记一次最全的Java+Elasticsearch数据保存与查询操作

前言

      最近公司有一个需求,就是要将网关(Java开发)的日志写入Elasticsearch中,并进行日志查询与展示,由于楼主之前没有接触过Elasticsearch,更谈不上Java Api的使用了,于是苦思良久,各种查阅资料,最后功夫不负有心人,终于完成了功能。现将过程及方法论分享如下,希望可以帮到他人。

一、相关Jar包的引入

      Java使用Elasticsearch 所需要的Jar包依赖如下:

        <dependency>
			<groupId>org.elasticsearch.client</groupId>
			<artifactId>transport</artifactId>
			<version>6.5.4</version>
		</dependency>
		<dependency>
			<groupId>org.elasticsearch</groupId>
			<artifactId>elasticsearch</artifactId>
			<version>6.5.4</version>
		</dependency>
		<dependency>
			<groupId>org.elasticsearch</groupId>
			<artifactId>elasticsearch-core</artifactId>
			<version>6.5.4</version>
		</dependency>
		<dependency>
			<groupId>org.elasticsearch</groupId>
			<artifactId>elasticsearch-secure-sm</artifactId>
			<version>6.5.4</version>
		</dependency>
		<dependency>
			<groupId>org.elasticsearch</groupId>
			<artifactId>elasticsearch-x-content</artifactId>
			<version>6.5.4</version>
		</dependency>
		<dependency>
			<groupId>org.elasticsearch</groupId>
			<artifactId>elasticsearch-cli</artifactId>
			<version>6.5.4</version>
		</dependency>
		<dependency>
			<groupId>org.elasticsearch</groupId>
			<artifactId>jna</artifactId>
			<version>4.5.1</version>
		</dependency>
		<dependency>
			<groupId>org.elasticsearch.plugin</groupId>
			<artifactId>transport-netty4-client</artifactId>
			<version>6.5.4</version>
		</dependency>
		<dependency>
			<groupId>org.elasticsearch.plugin</groupId>
			<artifactId>reindex-client</artifactId>
			<version>6.5.4</version>
		</dependency>
		<dependency>
			<groupId>org.elasticsearch.client</groupId>
			<artifactId>elasticsearch-rest-client</artifactId>
			<version>6.5.4</version>
		</dependency>
		<dependency>
			<groupId>org.elasticsearch.plugin</groupId>
			<artifactId>lang-mustache-client</artifactId>
			<version>6.5.4</version>
		</dependency>
		<dependency>
			<groupId>org.elasticsearch.plugin</groupId>
			<artifactId>percolator-client</artifactId>
			<version>6.5.4</version>
		</dependency>
		<dependency>
			<groupId>org.elasticsearch.plugin</groupId>
			<artifactId>parent-join-client</artifactId>
			<version>6.5.4</version>
		</dependency>
		<dependency>
			<groupId>org.elasticsearch.plugin</groupId>
			<artifactId>rank-eval-client</artifactId>
			<version>6.5.4</version>
		</dependency>
		<dependency>
			<groupId>com.google.code.gson</groupId>
			<artifactId>gson</artifactId>
			<version>2.8.0</version>
		</dependency>

二、创建连接

在使用java调用Elasticsearch之前,需要先创建客户端与Elasticsearch服务器之间的连接。创建连接的代码片段如下:

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

import java.net.InetAddress;
import java.net.UnknownHostException;


public class ESUtil {

	private static volatile TransportClient client;

	/**
	 *采用双端检索机制实现客户端为单例模式
	 * @param clusterName    你的Elasticsearch集群名称
         * @param hostName       你的Elasticsearch的主机Ip地址
         * @param hostPort       你的Elasticsearch与客户端通信的端口,一般为9300
	 * @return TransportClient 
	 * @throws UnknownHostException
	 */
	@SuppressWarnings("resource")
	public static TransportClient getClient(String clusterName, String hostName, int hostPort) {
		if (client == null) {
			synchronized (TransportClient.class) {
				try {
					client = new PreBuiltTransportClient(Settings.builder().put("cluster.name", clusterName).build())
							.addTransportAddress(new TransportAddress(InetAddress.getByName(hostName), hostPort));
				} catch (UnknownHostException e) {
					e.printStackTrace();
				}
			}
		}
		return client;
	}
}

三、初始化Elasticsearch中的索引模板

1、初始化索引模板相关代码如下:

 /**
     * 判断索引是否存在
     * @param client
     * @param indexName
     * @return
     */
    public boolean existIndex(TransportClient client,String indexName){
        boolean existIndex = false;
        try {
            existIndex = client.admin().indices().exists(new IndicesExistsRequest().indices(new String[]{indexName}))
                    .actionGet().isExists();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return existIndex;
    }
/**
     * 创建并初始化索引
     *@param clazz    需要创建索引的实体类
     * @param indexName    需要创建的索引名称
     */
    @SuppressWarnings("rawtypes")
	public void initIndex(Transpo
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值