文章目录
ElasticSearch学习笔记(三)
1.Springboot集成ElasticSearch
1.1创建工程
父模块创建maven工程,子模块创建springboot工程(创建时,勾选elasticsearch依赖)。
1.2配置ElasticSearch
ElasticSearchClientConfig配置类
@Configuration
public class ElasticSearchClientConfig {
@Bean
public RestHighLevelClient restHighLevelClient(){
RestHighLevelClient client=new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost",9200,"http")
)
);
return client;
}
}
2.Elasticsearch在springboot里的增删改查
2.1创建索引
@SpringBootTest
class EsApiApplicationTests {
@Autowired
private RestHighLevelClient client;
/**
* 测试索引的创建
*/
@Test
void contextLoads() throws IOException {
//创建索引请求
CreateIndexRequest request = new CreateIndexRequest("jiang_index");
//执行请求,请求后获得响应
CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);
System.out.println(response);
}
}
访问前的索引:
再次查看索引信息
2.2判断索引是否存在
@Test
void testExistIndex() throws IOException {
//创建索引请求
GetIndexRequest request = new GetIndexRequest("jiang_index");
//获得索引,判断是否存在
boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
System.out.println(exists);
}
}
2.3删除索引
@Test
void testDeleteIndex() throws IOException {
//创建删除索引请求
DeleteIndexRequest request = new DeleteIndexRequest("jiang_index");
//获得索引
AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
System.out.println(delete);
}
}
2.4添加文档
创建对应的实体类
}
/**
* 添加文档
*/
@Test
void addDocunemntForIndex() throws IOException {
//1.创建对象
User user = new User("jierlung", 18);
//2.创建请求对象
IndexRequest request = new IndexRequest("jiang_index");
//3.规则 put /jiang_index/_doc/1
request.id("1");
request.timeout(TimeValue.timeValueSeconds(1));
//4.将数据放入请求json中
request.source(JSON.toJSON(user), XContentType.JSON);
//5.发送请求获取响应结果
IndexResponse response = client.index(request, RequestOptions.DEFAULT);
System.out.println(response.toString()); //结果为对应的json
System.out.println(response.status()); //返回状态
}
2.6判断文档是否存在
/**
* 判断文档是否存在
*/
@Test
void testIsExist() throws IOException {
GetRequest getRequest = new GetRequest("jiang_index", "1");
//不获取返回_source的上下文了
getRequest.fetchSourceContext(new FetchSourceContext(false));
getRequest.storedFields("_none_");
boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);
System.out.println(exists);
}
}
2.7获取文档的信息
/**
* 获取文档信息
*/
@Test
void testGetDocument() throws IOException {
GetRequest getRequest = new GetRequest("jiang_index", "1");
GetResponse response = client.get(getRequest, RequestOptions.DEFAULT);
System.out.println(response.getSourceAsString()); //打印文档的内容
System.out.println(response); //返回内容和密令一样
}
2.8更新文档的信息
/**
* 更新文档信息
*/
@Test
void testUpdateDocument() throws IOException {
UpdateRequest updateRequest = new UpdateRequest("jiang_index","1");
updateRequest.timeout("1s");
User user = new User("黎明", 16);
updateRequest.doc(JSON.toJSON(user),XContentType.JSON);
UpdateResponse update = client.update(updateRequest, RequestOptions.DEFAULT);
System.out.println(update);
}
2.9删除文档信息
/**
* 删除文档信息
*/
@Test
void testDeleteDocument() throws IOException {
DeleteRequest deleteRequest = new DeleteRequest("jiang_index", "1");
deleteRequest.timeout("1s");
DeleteResponse delete = client.delete(deleteRequest, RequestOptions.DEFAULT);
System.out.println(delete.status());
}
2.10批量插入数据
/**
*批量插入数据
*/
@Test
void testBulkRequest() throws IOException {
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.timeout("1s");
ArrayList<User> users = new ArrayList<>();
users.add(new User("jiang1",14));
users.add(new User("jiang2",14));
users.add(new User("jiang3",14));
users.add(new User("jiang4",14));
users.add(new User("jiang5",14));
users.add(new User("jiang6",14));
for (int i=0;i<users.size();i++){
bulkRequest.add(new IndexRequest("jiang_index")
.id(""+(i+1))
.source(JSON.toJSON(users.get(i)),XContentType.JSON)
);
}
BulkResponse bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);
System.out.println(bulkResponse.hasFailures()); //是否失败,返回false代表成功
}
3.11查询
// 查询
// SearchRequest 搜索请求
// SearchSourceBuilder 条件构造
// HighlightBuilder 构建高亮
// TermQueryBuilder精确查询
// MatchALLQueryBuilder
// xxx QueryBuilder 对应我们刚才看到的命令!
/**
* 查询
*/
@Test
void testSearch() throws IOException {
//创建请求
SearchRequest searchRequest = new SearchRequest("jiang_index");
//构建搜索条件
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
//查询条件,我们可以使用QueryBuilders 工具来实现
TermQueryBuilder termQueryBuilder= QueryBuilders.termQuery("userName","jiang1");
sourceBuilder.query(termQueryBuilder);
sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
searchRequest.source(sourceBuilder);
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
System.out.println(JSON.toJSON(searchResponse.getHits()));
System.out.println("========================");
for (SearchHit hit : searchResponse.getHits().getHits()) {
System.out.println(hit.getSourceAsMap());
}
}