要注意到
elasticsearch版本要和自己下载的版本一致;
springboot使用版本为2.5.4
2.config4.0.0 org.springframework.boot spring-boot-starter-parent 2.5.4 com.porridge porridge-es-api 0.0.1-SNAPSHOT porridge-es-api Demo project for Spring Boot 1.8 7.13.2 com.alibaba fastjson 1.2.62 org.springframework.boot spring-boot-starter-data-elasticsearch org.springframework.boot spring-boot-starter-web org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-devtools runtime true org.springframework.boot spring-boot-maven-plugin org.projectlombok lombok
config包下的ElasticsearchClientConfig
@Configuration
public class ElasticsearchClientConfig {
@Bean
public RestHighLevelClient restHighLevelClient(){
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost", 9200, "http")));
return client;
}
}
3.User
实体类
@Component
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private String name;
private int age;
}
4.PorridgeEsApiApplication
@SpringBootApplication
public class PorridgeEsApiApplication {
public static void main(String[] args) {
SpringApplication.run(PorridgeEsApiApplication.class, args);
}
}
二.相关API测试
在这里要先启动ElasticSearch
在测试类中进行依赖注入
@Autowired
@Qualifier("restHighLevelClient")
private RestHighLevelClient client;
1.索引
索引的创建
@Test
void testCreateIndex() throws IOException {
//1.创建索引请求
CreateIndexRequest request = new CreateIndexRequest("book");
//2.执行创建请求 IndicesClient 请求后获得响应
CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);
System.out.println(createIndexResponse);
}
访问localhost:9100
获得索引
判断是否存在
@Test
void testExistIndex() throws IOException {
GetIndexRequest request = new GetIndexRequest("book");
boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
//存在返回true
System.out.println(exists);
}
删除索引
@Test
void testdelIndex() throws IOException {
DeleteIndexRequest Request = new DeleteIndexRequest("book");
AcknowledgedResponse delete = client.indices().delete(Request, RequestOptions.DEFAULT);
System.out.println(delete.isAcknowledged());
}
添加文档
@Test
void testAdddocument() throws IOException {
User user = new User("porridge", 3);
//创建请求
IndexRequest request = new IndexRequest("book");
//规则 put /book/_doc/1
request.id("1");
request.timeout(Timevalue.timevalueSeconds(1));
request.timeout("1s");
//将对象转换成json
IndexRequest source = request.source(JSON.toJSONString(user), XContentType.JSON);
//客户端发送请求,获取响应结果
IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
System.out.println(indexResponse.toString());
System.out.println(indexResponse.status());
}
判断文档是否存在
@Test
void testIsExists() throws IOException {
GetRequest getRequest = new GetRequest("book", "1");
//不获取返回的_source 的上下文
getRequest.fetchSourceContext(new FetchSourceContext(false));
getRequest.storedFields("_none_");
boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);
System.out.println(exists);
}
获取文档信息
@Test
void getdocument() throws IOException {
GetRequest getRequest = new GetRequest("book", "1");
GetResponse documentFields = client.get(getRequest, RequestOptions.DEFAULT);
String sourceAsString = documentFields.getSourceAsString();
//文档内容
System.out.println(sourceAsString);
//获取全部信息
System.out.println(documentFields);
}
更新文档
@Test
void UpdateRequest() throws IOException {
UpdateRequest updateRequest = new UpdateRequest("book","1");
//超过的时间
updateRequest.timeout("1s");
User user = new User("李大哥2222", 18);
updateRequest.doc(JSON.toJSONString(user), XContentType.JSON);
UpdateResponse update = client.update(updateRequest, RequestOptions.DEFAULT);
System.out.println(update.status());
}
删除文档信息
@Test
void delRequest() throws IOException {
DeleteRequest request = new DeleteRequest("book", "1");
request.timeout("1s");
DeleteResponse delete = client.delete(request, RequestOptions.DEFAULT);
System.out.println(delete.status());
}
批量添加数据
@Test
void testBulkRequest() throws IOException {
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.timeout("10s");
ArrayList
多条件查询
//search 查询
//SearchSourceBuilder 条件构造查询
//HighlightBuilder 高亮查询
//TermQueryBuilder 精确查询
//MatchAllQueryBuilder 查询全部
//xxxQueryBuilder 对应我们刚才看见的searchSourceBuilder命令
@Test
void search() throws IOException {
//创建查询请求
SearchRequest searchRequest = new SearchRequest("book");
//构建搜索条件
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//searchSourceBuilder.from();
HighlightBuilder highlighter = searchSourceBuilder.highlighter();
RangeQueryBuilder age = QueryBuilders.rangeQuery("age").gte("1").lte("3");
//条件查询 ,可以使用QueryBuilder 工具类来实现
//QueryBuilders.termQuery(); 精确查询
//QueryBuilders.matchAllQuery(); 匹配所有类型的
//MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
//TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("age", "3");
searchSourceBuilder.query(age);
//设置延时
searchSourceBuilder.timeout(new Timevalue(60, TimeUnit.SECONDS));
//设置搜索资源
searchRequest.source(searchSourceBuilder);
SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);
System.out.println(JSON.toJSONString(search.getHits()));
System.out.println("==================");
for (SearchHit hit : search.getHits().getHits()) {
System.out.println(hit.getSourceAsMap());
}
}



