导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
//方便做数据处理
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
配置类
把RestHighLevelClient 对象放入容器,java主要靠该对象操作es。
@Configuration
public class ElasticSearchClientConfig {
@Bean
public RestHighLevelClient restHighLevelClient(){
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("自己服务器IP", 9200, "http")));
return client;
}
}
基本操作
这里只进行了:
索引操作
文档操作
批量插入数据
具体更多操作参考elasticsearch官网API手册
class MyelasticsearchApplicationTests {
@Autowired
@Qualifier("restHighLevelClient")
private RestHighLevelClient client;
@Test
void testCreateIndex() throws IOException {
//1.创建索引请求
CreateIndexRequest request = new CreateIndexRequest("user_index");
//2.执行索引请求
CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);
System.out.println(response);
}
/*获取索引,只能判断存不存在*/
@Test
void testExistIndex() throws IOException {
GetIndexRequest request = new GetIndexRequest();
request.indices("user_index");
boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
System.out.println(exists);
}
/*删除索引*/
@Test
void testDeleteIndex() throws IOException {
DeleteIndexRequest request = new DeleteIndexRequest("user_index");
AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
System.out.println(delete.isAcknowledged());
}
/*添加文档*/
@Test
void testAddDocument() throws IOException {
User user = new User("猪八戒", 20, 10001, 56001);
/*原来的restfulAPI规则: PUT /user_index/_doc/1 */
//创建请求
IndexRequest indexRequest = new IndexRequest("user_index");
indexRequest.id("1");
indexRequest.timeout(TimeValue.timeValueSeconds(1));
//将数据放入请求 必须是json
indexRequest.source(JSON.toJSONString(user), XContentType.JSON);
//客户端发送请求
IndexResponse indexResponse = client.index(indexRequest, RequestOptions.DEFAULT);
System.out.println(indexRequest.toString());
}
/* 获取文档,判断是否存在 */
/*原始规则: GET /index/_doc/1 */
@Test
void testDocExist() throws IOException {
GetRequest getRequest = new GetRequest("user_index", "1");
//不获取返回的_source上下文了
getRequest.fetchSourceContext(new FetchSourceContext(false));
getRequest.storedFields("_none_");
boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);
System.out.println(exists);
}
/*获取文档信息*/
@Test
void testGetDoc() throws IOException {
GetRequest getRequest = new GetRequest("user_index", "1");
GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
System.out.println(getResponse.getSourceAsString());
System.out.println(getResponse);
}
/*获取所有文档信息*/
@Test
void testGetAllDoc() throws IOException {
SearchRequest searchRequest = new SearchRequest("user_index");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchAllQuery());
searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
searchSourceBuilder.from(0);
searchSourceBuilder.size(10);
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
System.out.println(JSON.toJSONString(searchResponse.getHits()));
for(SearchHit documentFields : searchResponse.getHits().getHits()){
System.out.println(documentFields.getSourceAsMap());
}
}
/*更新文档*/
/*原始规则:
* PUT /index/_doc/1
* {
* "name": "小张"
* }
* 或
* POST /index/_doc/1/_update
* {
* "doc":{
* "name": "小张"
* }
* }
* */
@Test
void testUpdateDoc() throws IOException {
UpdateRequest updateRequest = new UpdateRequest("user_index", "1");
updateRequest.timeout(TimeValue.timeValueSeconds(1));
User user = new User("孙悟空", 24, 10001, 56001);
updateRequest.doc(JSON.toJSONString(user),XContentType.JSON);
//执行请求
UpdateResponse updateResponse = client.update(updateRequest, RequestOptions.DEFAULT);
System.out.println(updateResponse);
}
/*删除文档*/
/*原始规则: DELETE /index/_doc/1 */
@Test
void testDeleteDoc() throws IOException {
DeleteRequest deleteRequest = new DeleteRequest("user_index", "1");
deleteRequest.timeout("1s");
DeleteResponse deleteResponse = client.delete(deleteRequest, RequestOptions.DEFAULT);
System.out.println(deleteResponse.status());
}
/*批量插入数据*/
@Test
void testBulkDoc() throws IOException {
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.timeout("1s");
ArrayList<Object> userList = new ArrayList<>();
userList.add(new User("孙悟空", 24, 10001, 56001));
userList.add(new User("猪八戒", 35, 10001, 56001));
userList.add(new User("沙和尚", 20, 10001, 56002));
userList.add(new User("白龙马", 35, 10001, 56001));
userList.add(new User("唐僧", 24, 10002, 56002));
userList.add(new User("观音菩萨", 210, 10002, 56002));
userList.add(new User("如来", 300, 10002, 56001));
userList.add(new User("玉皇大帝", 24, 10003, 56001));
//批处理请求
for (int i=0; i < userList.size();i++){
bulkRequest.add(
new IndexRequest("user_index")
.id(""+(i+1))
.source(JSON.toJSONString(userList.get(i)),XContentType.JSON)
);
}
//执行请求
BulkResponse bulkItemResponses = client.bulk(bulkRequest, RequestOptions.DEFAULT);
System.out.println(bulkItemResponses.hasFailures());//是否失败,返回false表示成功!
}
}