elasticsearch最基本用法及连接超时问题

首先说明,我在windows上玩的。

1、在这里下载windows版本。

2、解压后,直接在bin目录cmd,在黑窗口运行elasticearch.bat,一个es实例就启好了,默认启动的端口为9200和9300。

3、关掉该实例,复制两份es的文件夹,修改该文件夹config下的elasticsearch.yml文件,主要修改下图所示端口:

elasticsearch最基本用法及连接超时问题

反正就是3份实例的这两个配置各不相同。

注意:如果你的实例有些是放在别的机子上,例如你在你同事的电脑上开了一个实例,这是为了模拟实际集群的样子,这时还需要把这两个配置放开:

elasticsearch最基本用法及连接超时问题

上图是你本机的ip。

elasticsearch最基本用法及连接超时问题

这个时候当我启动这3个实例的时候,出现了一个搞了我一天的问题,那就是你最好把你和你同事电脑的防火墙全部关掉,不然很可能两边连不上,黑窗口一直报连接超时的问题。反正我的是出现了这个问题,关掉防火墙就好了。

通过以上步骤,差不多就可以启动一个集群了。

4、接下来记录java api 连接该集群,并往该集群新增索引,并往该索引中新增文档,删除文档及查询文档。

5、一个操作集群的工具类 ElasticsearchClientUtil:

package com.mysteel.elasticsearch;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Map;

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

public class ElasticsearchClientUtil {
	
	private static TransportClient client;
	
	static {
		Settings settings = Settings.builder().put("cluster.name", "elasticsearch").build();
        try {
			client = new PreBuiltTransportClient(settings)
			        .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.20.85"), 9300));
		} catch (UnknownHostException e) {
			e.printStackTrace();
			System.exit(1);
		}
	}
	
	public static void createIndex(String index, Settings esSetting) {
		client.admin().indices().prepareCreate(index).setSettings(esSetting).execute().actionGet();
		System.out.println("新增索引成功................");
		closeConnect();
	}
	
	/** 新增文档 */
	public static void creatDocument(String index, String type, String id, Map<String, Object> json) {
		client.prepareIndex(index, type, id).setSource(json).get();
		System.out.println("新增文档成功................");
		closeConnect();
	}
	
	/** 删除文档*/
	public static void deleteDocument(String index, String type, String id) {
		client.prepareDelete(index, type, id).get();
		System.out.println("删除文档成功................");
		closeConnect();
	}
	
	/** 查询文档 */
	public static void queryDocument(String index, String type, String id) {
		GetResponse response = client.prepareGet(index, type, id).get();
		String result = response.getSourceAsString();
		System.out.println("查询文档成功................:"+result);
		closeConnect();
	}

	public static void closeConnect() {
		client.close();
	}
}

6、一个测试工具类的测试类 ElasticsearchClientTest:

package com.mysteel.elasticsearch;

import java.util.HashMap;
import java.util.Map;

import org.elasticsearch.common.settings.Settings;

public class ElasticsearchClientTest {

	public static void main(String[] args) {
//		createIndex();
//		createWzxDocument();
//		createLqxDocument();
//		createLzlDocument();
		queryDocument();
	}
	
	private static void createIndex(){
		Settings esSetting = Settings.builder().put("number_of_shards", 3).put("number_of_replicas", 1).build();
		ElasticsearchClientUtil.createIndex("user", esSetting);
	}
	
	private static void createWzxDocument(){
		Map<String, Object> json = new HashMap<String, Object>(16);
		json.put("name", "王祖贤");
		json.put("age", "18");
		json.put("interest", "she likes to read");
		
		ElasticsearchClientUtil.creatDocument("user", "woman", "1", json);
	}
	
	private static void createLqxDocument(){
		Map<String, Object> json = new HashMap<String, Object>(16);
		json.put("name", "林青霞");
		json.put("age", "20");
		json.put("interest", "she likes to be an actress");
		
		ElasticsearchClientUtil.creatDocument("user", "woman", "2", json);
	}
	
	private static void createLzlDocument(){
		Map<String, Object> json = new HashMap<String, Object>(16);
		json.put("name", "林志玲");
		json.put("age", "20");
		json.put("interest", "she likes to be an model");
		
		ElasticsearchClientUtil.creatDocument("user", "woman", "3", json);
	}
	
	private static void queryDocument(){
		ElasticsearchClientUtil.queryDocument("user", "woman", "1");
	}

}

pom文件:

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

运行以上测试类代码会报日志错误,根据错误信息来看,es需要日志系统打印信息。不过不影响实际运行。

最终效果如图:

elasticsearch最基本用法及连接超时问题