package cn.itcast.hotel; import cn.itcast.hotel.mapper.HotelMapper; import cn.itcast.hotel.pojo.Hotel; import cn.itcast.hotel.pojo.HotelDoc; import com.alibaba.fastjson.JSON; import org.apache.http.HttpHost; import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest; import org.elasticsearch.action.bulk.BulkRequest; import org.elasticsearch.action.delete.DeleteRequest; import org.elasticsearch.action.get.GetRequest; import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.support.master.AcknowledgedResponse; import org.elasticsearch.action.update.UpdateRequest; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.client.indices.CreateIndexRequest; import org.elasticsearch.client.indices.GetIndexRequest; import org.elasticsearch.common.xcontent.XContentType; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import javax.annotation.Resource; import java.io.IOException; import java.util.List; @SpringBootTest class HotelDemoApplicationTests { private RestHighLevelClient client; public static final String MAPPING_TEMPLATE = "{\n" + " \"mappings\": {\n" + " \"properties\": {\n" + " \"id\": {\n" + " \"type\": \"keyword\"\n" + " },\n" + " \"name\":{\n" + " \"type\": \"text\",\n" + " \"analyzer\": \"ik_max_word\",\n" + " \"copy_to\": \"all\"\n" + " },\n" + " \"address\":{\n" + " \"type\": \"keyword\",\n" + " \"index\": false\n" + " },\n" + " \"price\":{\n" + " \"type\": \"integer\"\n" + " },\n" + " \"score\":{\n" + " \"type\": \"integer\"\n" + " },\n" + " \"brand\":{\n" + " \"type\": \"keyword\",\n" + " \"copy_to\": \"all\"\n" + " },\n" + " \"city\":{\n" + " \"type\": \"keyword\",\n" + " \"copy_to\": \"all\"\n" + " },\n" + " \"starName\":{\n" + " \"type\": \"keyword\"\n" + " },\n" + " \"business\":{\n" + " \"type\": \"keyword\"\n" + " },\n" + " \"location\":{\n" + " \"type\": \"geo_point\"\n" + " },\n" + " \"pic\":{\n" + " \"type\": \"keyword\",\n" + " \"index\": false\n" + " },\n" + " \"all\":{\n" + " \"type\": \"text\",\n" + " \"analyzer\": \"ik_max_word\"\n" + " }\n" + " }\n" + " }\n" + "}"; @BeforeEach public void before() { //client对象就是操作ES的对象 client = new RestHighLevelClient(RestClient.builder (HttpHost.create("http://192.168.221.135:9200"))); } @AfterEach public void after() throws IOException { client.close(); } @Resource private HotelMapper hotelMapper; /** * 删除索引库 * * @throws IOException */ @Test void contextLoads() throws IOException { RestHighLevelClient client = new RestHighLevelClient(RestClient.builder (HttpHost.create("http://192.168.221.135:9200"))); //todo 1.等于告诉ES需要发送的是 Delete请求 DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest("hotel"); //todo 2.调用删除请求 AcknowledgedResponse delete = client.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT); } /** * 创建索引库 */ @Test public void createIndex() throws IOException { //todo 获取连接对象 //索引库的名字 CreateIndexRequest createIndexRequest = new CreateIndexRequest("hotel"); //todo 携带参数(映射) createIndexRequest.source(MAPPING_TEMPLATE, XContentType.JSON); //todo 找到创建索引的方法 client.indices().create(createIndexRequest, RequestOptions.DEFAULT); //todo 关闭连接 } /** * 查询索引 get /hotel */ @Test public void getIndex() throws IOException { GetIndexRequest getIndexRequest = new GetIndexRequest("hotel"); boolean exists = client.indices().exists(getIndexRequest, RequestOptions.DEFAULT); System.out.println("hotel是否存在:" + exists); } /** * 新增数据到ES */ @Test public void add() throws IOException { //todo 1.为了方便从数据库里面查询一个酒店 Hotel hotel = hotelMapper.selectById(38609); //todo 把数据库的酒店对象转换成ES的HotelDOC对象 HotelDoc hotelDoc = new HotelDoc(hotel); String jsonString = JSON.toJSONString(hotelDoc); //todo 注意: 如果不给数据设置ID,那么ES会自动的生成一个UUID的数据 IndexRequest indexRequest = new IndexRequest("hotel").id(hotelDoc.getId().toString()); //todo 2.添加的文档数据 indexRequest.source(jsonString, XContentType.JSON); //todo 发送添加请求 client.index(indexRequest, RequestOptions.DEFAULT); } /** * 删除数据 * Delete /hotel/_doc/61Vq4ogB_DjiEoLwaSbe */ @Test public void remove() throws IOException { DeleteRequest deleteRequest = new DeleteRequest("hotel").id("61Vq4ogB_DjiEoLwaSbe"); client.delete(deleteRequest, RequestOptions.DEFAULT); } /** * 查询数据 * Delete /hotel/_doc/38609 */ @Test public void find() throws IOException { GetRequest getRequest = new GetRequest("hotel").id("38609"); GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT); String json = getResponse.getSourceAsString(); //todo 把返回值的JSON转换成对象 HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class); System.out.println(hotelDoc); } /** * 修改数据 * <p> * 参考案例 * PUT /student/_doc/1 * { * "name":"关羽", * "info":"手持青龙偃月刀", * "age":40 * } */ @Test public void modify() throws IOException { //查询获得到数据 GetRequest getRequest = new GetRequest("hotel").id("38609"); GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT); String json = getResponse.getSourceAsString(); //todo 把返回值的JSON转换成对象 HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class); hotelDoc.setName("自如享优品"); //todo 修改数据 UpdateRequest updateRequest = new UpdateRequest("hotel", "38609"); updateRequest.doc(JSON.toJSONString(hotelDoc), XContentType.JSON); client.update(updateRequest, RequestOptions.DEFAULT); } /** * 数据批量导入 */ @Test public void adds() throws IOException { //todo 初始化所有的数据 List<Hotel> hotelList = hotelMapper.selectList(null); //添加数据的桶 BulkRequest bulkRequest = new BulkRequest(); hotelList.stream().forEach(hotel -> { //todo 转换Hotel -> HotelDoc HotelDoc hotelDoc = new HotelDoc(hotel); IndexRequest indexRequest = new IndexRequest("hotel").id(hotelDoc.getId().toString()); indexRequest.source(JSON.toJSONString(hotelDoc), XContentType.JSON); bulkRequest.add(indexRequest); }); //找方法 bulk() 批量导入的方法 client.bulk(bulkRequest, RequestOptions.DEFAULT); } }
标签:语句,hotel,new,RestCilent,client,ElasticSearch,org,import,todo From: https://www.cnblogs.com/Rover20230226/p/17498082.html