1.进入官网https://www.elastic.co/cn/
2.查找api文档
3.找到该导入的依赖:
org.elasticsearch.client
elasticsearch-rest-high-level-client
7.6.1
4.找对象,初始化:
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost", 9200, "http"),
new HttpHost("localhost", 9201, "http")));
如果是单机,则new一个。如果是集群,则new多个,构建参数不用多说,一眼就懂吧?而且用完之后需要关闭客户端:
client.close();
5.分析类中的方法,配置项目!
项目创建完之后,打开pom发现es的客户端版本是7.6.2的,跟我所使用的版本不一致:
我们要保证版本一致,如下图:
6.编写配置类:
@Configuration
public class EsConfig {
@Bean
public RestHighLevelClient restHighLevelClient(){
//此处如果是集群配置,那么在buider里new多个HttpHost即可,使用逗号隔开
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.141.128", 9200, "http")));
return client;
}
}
到此,springboot与es的集成就完成了,接下来开始索引和文档api的使用!!!
1.索引的创建:
@SpringBootTest
class EsApiApplicationTests {
@Autowired
RestHighLevelClient restHighLevelClient;
/**
* 索引的创建
*/
@Test
void createIndex() throws IOException {
CreateIndexRequest request=new CreateIndexRequest("xrj_index");
CreateIndexResponse response=restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
System.out.println(response);
}
}
2.获取索引:
@SpringBootTest
class EsApiApplicationTests {
@Autowired
RestHighLevelClient restHighLevelClient;
/**
* 获取索引,判断索引是否存在
*/
@Test
void getIndex() throws IOException {
GetIndexRequest request=new GetIndexRequest("bujingyi");
boolean response=restHighLevelClient.indices().exists(request,RequestOptions.DEFAULT);
System.out.println(response);
}
}
3.删除索引:
@SpringBootTest
class EsApiApplicationTests {
@Autowired
RestHighLevelClient restHighLevelClient;
/**
*删除索引
*/
@Test
void deleteIndex() throws IOException {
DeleteIndexRequest request=new DeleteIndexRequest("xrj_index");
AcknowledgedResponse response=restHighLevelClient.indices().delete(request,RequestOptions.DEFAULT);
System.out.println(response.isAcknowledged());
}
}
4.创建文档:
@SpringBootTest
class EsApiApplicationTests {
@Autowired
RestHighLevelClient restHighLevelClient;
/**
*创建文档
*/
@Test
void addDocument() throws IOException {
//创建对象
Qcpage qcpage=new Qcpage();
qcpage.setCompany("彩讯科技股份有限公司").setData("2020-06-03 21:18:12").setJob("应用开发工程师").setPlace("深圳南山").setSalar("9000/月");
//创建请求,请求哪个索引库
IndexRequest request=new IndexRequest("51job");
//规则 PUT /51job/_doc/1
request.id("1"); //设置文档id
//设置请求超时时间
request.timeout("1s");
//将数据放入请求
request.source(JSON.toJSONString(qcpage), XContentType.JSON);
//客户端发送请求
IndexResponse response = restHighLevelClient.index(request,RequestOptions.DEFAULT);
System.out.println(response.toString());
System.out.println(response.status());
}
}
5.判断文档是否存在:
@SpringBootTest
class EsApiApplicationTests {
@Autowired
RestHighLevelClient restHighLevelClient;
/**
*获取文档 ,判断是否存在
*/
@Test
void docIsExists() throws IOException {
//创建请求,设置索引和文档id
GetRequest request=new GetRequest("51job","1");
//不获取返回的_source上下文了
request.fetchSourceContext(new FetchSourceContext(false));
request.storedFields("_none_");
boolean exists=restHighLevelClient.exists(request,RequestOptions.DEFAULT);
System.out.println(exists);
}
}
5.获取文档信息:
@SpringBootTest
class EsApiApplicationTests {
@Autowired
RestHighLevelClient restHighLevelClient;
/**
*获取文档信息
*/
@Test
void getDocument() throws IOException {
//设置索引和文档id
GetRequest request=new GetRequest("51job","1");
GetResponse response=restHighLevelClient.get(request,RequestOptions.DEFAULT);
System.out.println(response.getSourceAsString());
System.out.println(response);
}
}
打印的结果如下:
{"company":"彩讯科技股份有限公司","data":"2020-06-03 21:18:12","job":"应用开发工程师","place":"深圳南山","salar":"9000/月"}
{"_index":"51job","_type":"_doc","_id":"1","_version":1,"_seq_no":0,"_primary_term":1,"found":true,"_source":{"company":"彩讯科技股份有限公司","data":"2020-06-03 21:18:12","job":"应用开发工程师","place":"深圳南山","salar":"9000/月"}}
6.更新文档信息:
@SpringBootTest
class EsApiApplicationTests {
@Autowired
RestHighLevelClient restHighLevelClient;
/**
*更新文档信息
*/
@Test
void updateDocument() throws IOException {
//设置更新的索引和文档id
UpdateRequest request = new UpdateRequest("51job","1");
request.timeout("1s");
//创建一个实体类用于存放需要修改的字段内容
Qcpage qcpage = new Qcpage();
qcpage.setCompany("中国移动").setSalar("15000/月");
//设置更新语法的doc内容
request.doc(JSON.toJSONString(qcpage),XContentType.JSON);
UpdateResponse response = restHighLevelClient.update(request, RequestOptions.DEFAULT);
System.out.println(response.status());
}
}
7.删除文档信息:
@SpringBootTest
class EsApiApplicationTests {
@Autowired
RestHighLevelClient restHighLevelClient;
/**
*删除文档信息
*/
@Test
void deleteDocument() throws IOException {
//设置更新的索引和文档id
DeleteRequest request = new DeleteRequest("51job", "1");
request.timeout("1s");
DeleteResponse response = restHighLevelClient.delete(request, RequestOptions.DEFAULT);
System.out.println(response.status());
}
}
8.扩展:批量插入数据(批处理,一个例子即可,举一反三)
@SpringBootTest
class EsApiApplicationTests {
@Autowired
RestHighLevelClient restHighLevelClient;
/**
*批处理请求
*/
@Test
void bulkRequest() throws IOException {
BulkRequest request = new BulkRequest();
request.timeout("1s");
List list=new ArrayList<>();
list.add(new Qcpage("招待前台","中国移动","深圳南山","8000/月","2020-06-03 22:23:45"));
list.add(new Qcpage("java后台开发工程师","中国移动","深圳龙华","9000/月","2020-06-03 22:23:45"));
list.add(new Qcpage("vue开发工程师","彩讯科技股份有限公司","深圳龙岗","11000/月","2020-06-03 22:23:45"));
list.add(new Qcpage("运维工程师","中国联通","深圳福田","14000/月","2020-06-03 22:23:45"));
list.add(new Qcpage("测试工程师","中国电信","深圳宝安","12000/月","2020-06-03 22:23:45"));
list.add(new Qcpage("全栈工程师","富士康","深圳清湖","8000/月","2020-06-03 22:23:45"));
for (int i = 0; i
9.负责查询(以下代码查询bujingyi索引库中,那么字段包含芒果,或者年龄为14的文档,并分页,从索引为0的开始,取三个)
@SpringBootTest
class EsApiApplicationTests {
@Autowired
RestHighLevelClient restHighLevelClient;
/**
*复杂查询
*/
@Test
void serachDocument() throws IOException {
SearchRequest request = new SearchRequest("bujingyi");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
MatchQueryBuilder matchQuery1 = QueryBuilders.matchQuery("name","芒果");
MatchQueryBuilder matchQuery2 = QueryBuilders.matchQuery("age",14);
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.should(matchQuery1);
boolQueryBuilder.should(matchQuery2);
sourceBuilder.query(boolQueryBuilder).from(0).size(3);
request.source(sourceBuilder);
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
System.out.println(JSON.toJSONString(response.getHits()));
System.out.println("=====================================");
for (SearchHit searchHit:response.getHits().getHits()) {
System.out.println(searchHit.getSourceAsMap());
}
}
}
到此,springboot集成es,并如何对原生的索引和文档api的操作就结束了,其实并不难,一个套路而已,多练习就好了。。。