开发者学堂课程【ElasticSearch 入门精讲:连接 ES_演示】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/631/detail/9982
连接ES_演示
连接ES演示
打开 IDEA
选择 File,
新建 project,选中下属创建工程的一个母版,
一般选中的是 quickstart,选中 maven
下一步
Groupid:com.qf
ArtifactId:es-study,下一步,
下一步,finish。
等待创建完毕,
选中 enable auto-import
将依赖导入进来,改成1.8,上一个指的是编译教员程序用的基底版本,第二个指的是编译之后的自制码所对应的文件。
unit 可以选择稍微高点的版本,4.10,4.12.下面就是关于
Elasticsearch 的一些设计,一些依赖,将这些依赖直接导入进来。
直接导入依赖,首先就是 log 日志,用来打印的一些依赖,Maven 依赖:
<!-- 日志格式定制的 maven 依赖需要和资源目录 resources 下的 log4j.properties 结合在一 起使用-->
<dependency>
<groupId> org.apache.logging.log4j</groupld>
<artifactld> log4j-core </artifactId>
<version> 2.10.0</version>
</dependency>
<dependency>
<groupId> org.apache.logging.log4j</groupld>
<artifactId> log4j-api </artifactId>
<version> 2.100</version>
</dependency
>
…
下面就是 es 设计,clent 的一些 CPI
<l-- es 客户端的依赖,其中包含了一个核心的 api: TransportClient -->
<dependency>
<groupld>org.elasticsearch.client</groupld>
<artifactld>transport</artifactld>
<!--下述通过el表达式读取上述es-version标签标签体的值-->
<version>${es-version}</version>
</dependency>
<!-- es服务器对应的核心依赖-->
<dependency>
<groupld>org.elasticsearch</groupld>
<artifactld>elasticsearch</artifactld>
<version>${es-version}</version>
ldependency>
<!--该依赖中自定义了诸如:@data 的注解,作用在实体类之上,用来简化实体类的书写,代替:getter/setter 访问器;
除了导入依赖之外,还需要在idea中进行配置,参考:
https:/jingyan.baidu.com/article/0a52e3f4e53ca1bf63ed725c.html
<dependency>
<groupld>org.projectlombok</groupld>
<artifactId>lombok</artifactId>
v
rsion>1.16.20</version>
<dependency>
还有阿里巴巴的 json,这样一个 API
<!--用来操作 json 格式数据的 maven 依赖,阿里巴巴公司贡献的,阿里编程规约,p3c -->
<dependency>
<groupld>com.alibaba</groupld>
<artifactId>fastjson</artifactld>
<version>1.2.46</version>
<dependency>
<dependency>
<groupld>com.alibaba</groupIld>
xartiiacud-diuid-jariiiactld>
<!-- https://mvnrepository.com/artifact/org.nlpcn/elasticsearch-sql -->
<dependency>
<groupld>org.nlpcn</groupld>
<artifactId>elasticsearch-sql</artifactld>
<version>6.3.0.0</version>
</dependency>
</dependency>
<groupld>org.elasticsearch</groupld>
<ar
tifactld>elasticsearch-x-content</artifactld>
<ver
sion>6.5.3</version>
</dependency>
现在将 es 所需要的依赖全部导入进来,这些依赖参考的全部都是官网,等到导入完毕就可以写程序了,
还没有导入完毕可以刷新一下,要用动态去读取 properities 动态的值,
<es-version>6.5.3</es-version>
结果:
报错可以将一些没有用到的删掉,比如 log4j 可以删掉,没有影响,包括json,projectlombok.其实需要两个依赖就够了,一个是 transportclient,另一个是 elesticsearch.
开始写代码,写之前一定要保证导入是正确的,
删除掉自动生成的源程序,建一个子包,新建一个 Package ,新建一个资源目录,叫做 resources,右键点击 mark directory as,再点击,resouces root,下面就是 log4j,它能够定制日志输出的格式。
新建一个 New Class:testes,
Description:使用 Java api 操作 ES 集群测试类<br/>
Copyright (C),2018, Jansonxu <br/>
This program is protected by copyright laws. <br/>
Date: 2019年05月12日
public class TestES {
/**
*连接es集群的端口号
/*
private final static int POR7=9300;
private TransportClient client;
/**
*前处理
@Before
(前处理应该有一个注解)
public void setup() throws UnknownHostException {
System.out.println("前处理操作,用于进行全局的初始化..In");
Settings settings = Settings.builder().put("cluster.name","bigdata"). build);
Settings settings = null;
client = new PreBuiltTransportClient(settings);
client.addTransportAddresses(new TransportAddress(InetAddress.getByNamne("JANSON01"),POR7);
new TransportAddress(InetAddress. getByName("JANSON02"),POR刀),
new TransportAddress(InetAddress. getByName("JANSON03"),PORD);
/**
*正式测试的方法
@Test
public void testEnv(){
System.outprintln("正式开始测试..");
System. out.printIn("TransportClient的实例是: "+client);
}
@After
public void cleanup({
System. out.println("n后处理操作,用于进行资源的释
放
..);
if(client!=null){
client.close();
执行是有顺序的,先执行前处理的方法,再执行正式开始测试的方法,最后进行后处理操作,
首先有一个共同的端口号:
private final static int port=9300;用 private transportclient,处理 ES 集群的一个核心端口 api,对全局的 client 进行一个支持化,client=null,如何构建 client 的实例,点进去 client 查看,属于设置内,查看有哪些类,
有一个类叫做 prebuilt transportclient,属于普通类,普通类就可以new,client=new prebuilt transportclient(),
需要查询:class,collection和hostfailurelistener,
传一个 settings 的实例,准备一个 settings,settings=null,
client=new prebuilt transportclient(settings)
再加上多个 transport 的实例:
client.addtransportaddresses(newtransportaddresses())
构建 transportaddresses 实例,需要 inetaddress,int
查看 meta address
构建 inetsockeadress 需要传一个 hostname,addr,int port 来进行构建,client.addTransportAddresses(new TransportAddress(InetAddress.getByName("-J.ANSONO1"),PORT),
new TransportAddress(InetAddress.getByName(""JANSON02"),POR7),
new TransportAddress(InetAddress.getByName("JANSON03""),POR7));
可以打印一下/**
*正式测试的方法
*/
@Test
public void testEnv
()
{
System.out.println("正式开始测试.."");
system.out.println("TransportClient的实例是:"+client);
@After
public void cleanup({
System. out.println("n后处理操作,用于进行资源的释
放
..);
if(client!=null){
client.close();
运行结果:testes.java:39
意思是settings这个实例还没有准备,
Settings 是一个最终类,用build来构成他的实类,可以 put 一些参数名,参数值,
Settings settings = Settings.builder().put( key."cluster.name"“bigdata.,build();
这个参数和es集群服务器的参数是一样的。
[jerry@JANSONe1 ~]$ cd es/config/
[jerry@ANSONe1 config]$ vim elasticsearch.yml
Cluster.name:bigdata(参数名,参数值)
运行结果:ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...
实例创建成功。
<dependency>
<groupld</groupld>
<artifactld>log4j
-core</artifactld>
<
/
dependency>
搜一下 log4j,有一个 log4j coreapi 可以根据提示加进来
运行成功,证明服务器和客户端正常连接,
Log4j.2也可以加入进来,搜索 log4j,导入 log4japi,刷新,
测试结果:
Transportclient 的实例是:
org.elasticsearch.transport.client.prebuilttransportclient@7e75bf2d