「es集成java」es集成hive
今天给各位分享es集成java的知识,其中也会对es集成hive进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、es圈是什么
- 2、java操作es获取索引存储大小
- 3、在Idea中如何用java代码与es做连接的项目
- 4、java数据直接往es里存 会出现性能问题吗
- 5、Springboot集成ES及JPA
- 6、使用Docker快速部署ES单机或ES集群
es圈是什么
最近在给公司其他部门的同事输出关于 ElasticSearch (下面都简称ES) 的培训,内容从入门到(精通/放弃),反响还不错,有望在年底再冲一波绩效,哈哈。所以,独乐乐不如众乐乐,我整理了下大纲,脱敏了一些内容,发出来给大家一起学习一下,先从最基础的开始,后面会一步步深入,欢迎持续关注。
言归正传,要说ES那不得不先提一下 Apache Lucene,Lucene 是当下最先进、高性能、全功能的搜索引擎库。
而ES是用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。
一个分布式的实时文档存储,每个字段 可以被索引与搜索
一个分布式实时分析搜索引擎
能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据
发展历程
先来看看官网提到的一个有意思的小故事
许多年前,一个刚结婚的名叫 Shay Banon 的失业开发者,跟着他的妻子去了伦敦,他的妻子在那里学习厨师。 在寻找一个赚钱的工作的时候,为了给他的妻子做一个食谱搜索引擎,他开始使用 Lucene 的一个早期版本。
直接使用 Lucene 是很难的,因此 Shay 开始做一个抽象层,Java 开发者使用它可以很简单的给他们的程序添加搜索功能。 他发布了他的第一个开源项目 Compass。
后来 Shay 获得了一份工作,主要是高性能,分布式环境下的内存数据网格。这个对于高性能,实时,分布式搜索引擎的需求尤为突出, 他决定重写 Compass,把它变为一个独立的服务并取名 Elasticsearch。
第一个公开版本在2010年2月发布,从此以后,Elasticsearch 已经成为了 Github 上最活跃的项目之一,他拥有超过300名 contributors。 一家公司已经开始围绕 Elasticsearch 提供商业服务,并开发新的特性,但是,Elasticsearch 将永远开源并对所有人可用。
据说,Shay 的妻子还在等着她的食谱搜索引擎…
Elasticsearch 后来作为一家公司(Elastic公司)进行运作,定位为数据搜索和分析平台。在2014年6月获得7000万美元融资,累积融资过亿美元。
ES现在可以与Java、Ruby、Python、PHP、Perl、.NET等多种客户端集成。也可与Hadoop、Spark等大数据分析平台进行集成,功能十分强大。
基于Elasticsearch衍生出了一系列开源软件,统称为 Elatic Stack。包括了大家熟悉的ELK(ElasticSearch/Logstash/Kibana)等。
java操作es获取索引存储大小
150GB。
在ES中,索引是一组文档的集合,由于ES是个分布式的搜索引擎,索引会被分解成不同部分,索引大小为150GB。
Java指编程语言,Java具有大部分编程语言所共有的一些特征,被特意设计用于互联网的分布式环境,使用Java编写的应用程序,既可以在一台单独的电脑上运行,也可以被分布在一个网络的服务器端和客户端运行。
在Idea中如何用java代码与es做连接的项目
下面介绍一下如何使用Idea连接TFS服务器,并提交变更的代码到TFS服务器。
一、连接TFS服务器,并下载代码
Figure 1
Figure 2
Figure 3 - 输入TFS服务器的地址,例如:
Figure 4 - 选择服务器代码库地址和本地地址
Figure 5 - 代码下载中
Figure 6 - 选择创建项目
Figure 7
Figure 8 - 继续, 后面几项都是Idea导入代码的界面,省略截屏
Figure 9 - 打开的项目
java数据直接往es里存 会出现性能问题吗
java数据直接往es里存
会出现性能问题的,存多了会造成程序运行缓慢,卡顿。
Springboot集成ES及JPA
springboot maven项目结构
package com.example.esboot.entity;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
@Data
@NoArgsConstructor
@Accessors(chain =true)
@Document(indexName ="person",type ="_doc", shards =1, replicas =0)
public class Person {
private Integerid;
private Stringname;
private Stringsex;
public Integer getId() {return id;}
public void setId(Integer id) {this.id = id;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public String getSex() {return sex;}
public void setSex(String sex) {this.sex = sex;}
}
Elasticsearch 的JPA 使用
PersonRepository.java
package com.example.esboot.repository;
import com.example.esboot.entity.Person;
import org.springframework.data.elasticsearch.annotations.Highlight;
import org.springframework.data.elasticsearch.annotations.HighlightField;
import org.springframework.data.elasticsearch.core.SearchHit;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import java.util.List;
public interface PersonRepositoryextends ElasticsearchRepository {
@Highlight(fields = {
@HighlightField(name ="name"),
@HighlightField(name ="sex")
})
List findByNameOrSex(String text, String sex);
}
PersonService.java
package com.example.esboot.servcie;
import com.example.esboot.entity.Person;
import java.util.List;
public interface PersonService{
public Person findById(String id);
public String save(Person person);
Iterable findAll();
List findByNameOrSex(String text,String sex);
}
PersonServiceImpl.java
package com.example.esboot.servcie.impl;
import com.example.esboot.entity.Person;
import com.example.esboot.repository.PersonRepository;
import com.example.esboot.servcie.PersonService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class PersonServiceImplimplements PersonService {
@Resource
PersonRepositorypersonRepository;
@Override
public List findByNameOrSex(String text, String sex) {
List list =new ArrayList();
personRepository.findByNameOrSex(text, sex).forEach(personSearchHit -list.add(personSearchHit.getContent()));
return list;
}
@Override
public Person findById(String id) {
return personRepository.findById(id).get();
}
@Override
public String save(Person person) {
return personRepository.save(person).getName();
}
@Override
public Iterable findAll() {
return personRepository.findAll();
}
}
spring.elasticsearch.rest.uris=
spring.elasticsearch.rest.connection-timeout=300s
spring.data.elasticsearch.repositories.enabled=true
EsTest.java
package com.example.esboot.es;
import com.example.esboot.entity.Person;
import com.example.esboot.servcie.PersonService;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import org.junit.Test;
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
import org.springframework.data.elasticsearch.core.query.IndexQuery;
import org.springframework.data.elasticsearch.core.query.IndexQueryBuilder;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.annotation.Resource;
import java.util.List;
@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
public class EsTest {
@Resource
private ElasticsearchOperationselasticsearchOperations;
@Resource
private PersonServicepersonService;
@Test
public void test() {
Person person =new Person();
person.setId(1);
person.setName("baijie");
person.setSex("n");
IndexQuery indexQuery =new IndexQueryBuilder().withId(String.valueOf(person.getId())).withObject(person).build();
String docId =elasticsearchOperations.index(indexQuery, IndexCoordinates.of("person"));
System.out.println(docId);
}
@Test
public void save() {
Person person =new Person();
person.setId(2);
person.setName("中国");
person.setSex("男");
String name =personService.save(person);
System.out.println(name);
}
@Test
public void findByNameOrSex() {
List byNameOrSex =personService.findByNameOrSex("baijie","男");
System.out.println(byNameOrSex);
}
@Test
public void findAll() {
personService.findAll().forEach(person - {
System.out.println(person);
});
}
@Test
public void queryForObject() {
Person person =personService.findById("1");
System.out.println(person);
}
}
使用Docker快速部署ES单机或ES集群
ES现在是很多系统中不可或缺的一部分,为了在使用时快速的部署一个ES环境,这里记录一下自己的一些操作步骤。
所有的操作都是基于Docker来的,没有装Docker的话请参照 官方文档 安装
采用的ES版本为6.8.13
宿主机系统为Centos 7.8
单机版添加密码验证
集群版使用ssl传输
将下面的内容粘贴到elasticsearch.yml
ES_JAVA_OPTS设置了ES的启动内存,自己按需修改
discovery.type=single-node表示该es为单节点,不加这个的话,你的es健康状态会显示为黄色
根据提示,先输入y,然后输入密码,这里会要求输入多次,主要是需要给好几个系统添加密码,用户默认elastic
至此,单节点的elasticsearch就部署好了,通过elasticsearch head即可连接使用
生成的ssl证书在用户目录certs下 cd ~/certs 即可看到
后续步骤需要在每一台集群服务器上执行
NODE_LIST:配置集群中其他节点的地址,格式为:ip:port,ip2:port2
NODE_NAME:当前节点的name
至此,搭建就完了
我们一般在开发与测试的使用使用的单节点的es,节约资源嘛,而在生产的时候,那肯定就需要上集群了,这时候在开发与测试环境的时候,java的连接配置就会与生产有一些出入
我一般都是用的 spring-boot-starter-data-elasticsearch 搭配 x-pack-transport 来连接
先引入相关的依赖
版本号这东西自己注意下哈,es对这还是挺敏感的
这里主要是通过isCluster这个配置来区分的
如果连接的是集群,由于我们之前为集群配置了一个ssl证书,所以java连接的时候也是需要使用那个证书的,所以会多出来几个配置
es集成java的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于es集成hive、es集成java的信息别忘了在本站进行查找喔。