elasticsearch最基本用法及连接超时问题
首先说明,我在windows上玩的。
1、在这里下载windows版本。
2、解压后,直接在bin目录cmd,在黑窗口运行elasticearch.bat,一个es实例就启好了,默认启动的端口为9200和9300。
3、关掉该实例,复制两份es的文件夹,修改该文件夹config下的elasticsearch.yml文件,主要修改下图所示端口:
反正就是3份实例的这两个配置各不相同。
注意:如果你的实例有些是放在别的机子上,例如你在你同事的电脑上开了一个实例,这是为了模拟实际集群的样子,这时还需要把这两个配置放开:
上图是你本机的ip。
这个时候当我启动这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需要日志系统打印信息。不过不影响实际运行。
最终效果如图: