springboot整合elasticsearch全⽂检索(⾼阶API)⽂章⽬录
⼀、说明:
1.1、⼩编的案例说明
1. 如果没有安装可以参考⼩编这篇⽂章 ==>
2. ⼩编的elasticsearch的版本是7.4.2
3. 案例采⽤的⽅式(官⽅提供的):Elasticsearch-Rest-Client(elasticsearch-rest-high-level-client)
4. 使⽤kibana可视化⼯具查看数据
1.2、对elasticsearch的操作⽅式种类
操作 ==> 9300端⼝:TCP
spring-data-elasticsearch:transport-api.jar
说明:springboot 版本不同, transport-api.jar 不同,不能适配 es 版本
7.x 已经不建议使⽤,8 以后就要废弃
操作 ==> 9200:HTTP
1. JestClient:⾮官⽅,更新慢
2. RestTemplate:模拟发 HTTP 请求,ES 很多操作需要⾃⼰封装,⿇烦
3. HttpClient:同上(简单说就是和elasticsearch关联性不⾼,都要⾃⼰写⽅法)
4. Elasticsearch-Rest-Client:官⽅ RestClient,封装了 ES 操作,API 层次分明,上⼿简单(推荐)
5. 使⽤Elasticsearch-Rest-Client ==>
6. 都在API⽂档⾥⾯,普通的,复杂的检索…
⼆、springboot整合Elasticsearch-Rest-Client
2.1、引⼊依赖
⼩编安装的Elasticsearch版本是7.4.2所以版本要对应依赖版本也要是7.4.2
<!-- elasticsearch-java restful client 操作http -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.4.2</version>
</dependency>
要注意的⼀点是springboot默认会引⼊spring-data-elasticsearch
所以我们也要将其版本改成和我们对应的版本
如图:springboot中文
在properties⾥⾯修改成我们的版本:
<properties>
<java.version>1.8</java.version>
<!--这个是spring data 默认⽀持的。改成和我们⾃⼰配置的版本⼀致--> <elasticsearch.version>7.4.2</elasticsearch.version>
</properties>
查看maven依赖是否保持⼀致:
2.2、设置配置⽂件
⽬录:
package com.atguigu.fig;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import t.annotation.Bean;
import t.annotation.Configuration;
/**
* @author suqinyi
* @Date 2021/5/23
*/
/**
* 1、导⼊依赖
* 2、编写配置
* 3、参照API⽂档
*/
@Configuration
public class GulimallElasticSearchConfig {
public static final RequestOptions COMMON_OPTIONS;
static{
RequestOptions.Builder builder = Builder();
// builder.addHeader("Authorization", "Bearer " + TOKEN);
// builder.setHttpAsyncResponseConsumerFactory(
// new HttpAsyncResponseConsumerFactory
/
/ .HeapBufferedResponseConsumerFactory(30 * 1024 * 1024 * 1024));
COMMON_OPTIONS = builder.build();
}
//注⼊client
@Bean
public RestHighLevelClient esRestClient(){
RestHighLevelClient client =new RestHighLevelClient(
RestClient.builder(
new HttpHost("192.168.56.10",9200,"http")
)
);
return client;
}
}
2.3、在测试类中测试 => (添加更新⼆合⼀)
说明:如果在对这个users(名称叫索引)添加数据,那么不会报错,他的版本号会加上去(变化),所以是添加更新⼆合⼀package com.atguigu.gulimall.search;
import com.alibaba.fastjson.JSON;
import com.atguigu.fig.GulimallElasticSearchConfig;
import lombok.Data;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RestHighLevelClient;
import nt.XContentType;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.st.context.SpringBootTest;
import st.context.junit4.SpringRunner;
import st.context.junit4.SpringRunner;
import java.io.IOException;
@RunWith(SpringRunner.class)//指定spring的驱动
@SpringBootTest//⼩编的springboot版本是2.18 说明:2.x和1.x的版本测试类有着区别
public class GulimallSearchApplicationTests {
@Autowired
private RestHighLevelClient client;
/**
* 测试存储数据到es
* 更新也可以
*/
@Test
public void indexData()throws IOException {
IndexRequest indexRequest =new IndexRequest("users");
//数据的id-不设置就⾃动⽣成,类型string
indexRequest.id("1");
/
/ ⽅式⼀:
//indexRequest.source("username","zhangsan","age",18,"gender","男");
// ⽅式⼆(推荐):
User user =new User();
user.setAge(18);
user.setUsername("zhangsan");
user.setGender("男");
String jsonString = JSONString(user);
indexRequest.source(jsonString, XContentType.JSON);
//调⽤,执⾏操作
IndexResponse index = client.index(indexRequest, GulimallElasticSearchConfig.COMMON_OPTIONS);
//提取有⽤的数据
System.out.println("响应数据:"+"\n"+index);
}
@Data//使⽤lombok插件+依赖
class User{
private String username;
private String gender;
private Integer age;
}
//测试容器是否注⼊成功
@Test
public void testIfOK(){
System.out.println(client);
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论