索引库操作
-
-
- import org.apache.http.HttpHost;
- 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 java.io.IOException;
-
- public class ElassticTest {
-
- private RestHighLevelClient client;
- //创建与虚拟机的es的连接
- @BeforeEach
- void setUp() {
- this.client = new RestHighLevelClient(RestClient.builder(
- HttpHost.create("http://192.168.48.129:9200")
- ));
- }
-
- @Test
- void testConnect() {
- System.out.println(client);
- }
-
- @AfterEach
- void tearDown() throws IOException {
- this.client.close();
- }
-
-
- //创建索引库
- @Test
- void testCreateIndex() throws IOException {
- // 1.创建Request对象
- CreateIndexRequest request = new CreateIndexRequest("items");
- // 2.准备请求参数
- request.source(MAPPING_TEMPLATE, XContentType.JSON);
- // 3.发送请求
- client.indices().create(request, RequestOptions.DEFAULT);
- }
-
- //查看索引库是否存在
- @Test
- void testExistIndex() throws IOException {
- //创建request
- GetIndexRequest request = new GetIndexRequest("items");
-
- //发送请求
- boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
-
- System.out.println(exists);
-
- }
-
- 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" +
- " },\n" +
- " \"price\":{\n" +
- " \"type\": \"integer\"\n" +
- " },\n" +
- " \"stock\":{\n" +
- " \"type\": \"integer\"\n" +
- " },\n" +
- " \"image\":{\n" +
- " \"type\": \"keyword\",\n" +
- " \"index\": false\n" +
- " },\n" +
- " \"category\":{\n" +
- " \"type\": \"keyword\"\n" +
- " },\n" +
- " \"brand\":{\n" +
- " \"type\": \"keyword\"\n" +
- " },\n" +
- " \"sold\":{\n" +
- " \"type\": \"integer\"\n" +
- " },\n" +
- " \"commentCount\":{\n" +
- " \"type\": \"integer\"\n" +
- " },\n" +
- " \"isAD\":{\n" +
- " \"type\": \"boolean\"\n" +
- " },\n" +
- " \"updateTime\":{\n" +
- " \"type\": \"date\"\n" +
- " }\n" +
- " }\n" +
- " }\n" +
- "}";
- }
-
- import cn.hutool.core.bean.BeanUtil;
- import cn.hutool.json.JSONUtil;
- import com.hmall.item.domain.po.Item;
- import com.hmall.item.domain.po.ItemDoc;
- import com.hmall.item.service.IItemService;
- import org.apache.http.HttpHost;
- 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.update.UpdateRequest;
- import org.elasticsearch.client.RequestOptions;
- import org.elasticsearch.client.RestClient;
- import org.elasticsearch.client.RestHighLevelClient;
- 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.beans.factory.annotation.Autowired;
- import org.springframework.boot.test.context.SpringBootTest;
-
- import java.io.IOException;
-
- @SpringBootTest(properties = "spring.profiles.active=local")
- public class ElassticDocumentTest {
-
- private RestHighLevelClient client;
- @Autowired
- private IItemService itemService;
-
- @BeforeEach
- void setUp() {
- this.client = new RestHighLevelClient(RestClient.builder(
- HttpHost.create("http://192.168.48.129:9200")
- ));
- }
-
- @AfterEach
- void tearDown() throws IOException {
- this.client.close();
- }
-
- @Test
- void testAddDocument() throws IOException {
- // 1.根据id查询商品数据
- Item item = itemService.getById(100002644680L);
- // 2.转换为文档类型
- ItemDoc itemDoc = BeanUtil.copyProperties(item, ItemDoc.class);
- // 3.将ItemDTO转json
- String doc = JSONUtil.toJsonStr(itemDoc);
-
- // 1.准备Request对象
- IndexRequest request = new IndexRequest("items").id(itemDoc.getId());
- // 2.准备Json文档
- request.source(doc, XContentType.JSON);
- // 3.发送请求
- client.index(request, RequestOptions.DEFAULT);
- }
-
- @Test
- void testGetDocumentById() throws IOException {
- // 1.准备Request对象
- GetRequest request = new GetRequest("items").id("100002644680");
- // 2.发送请求
- GetResponse response = client.get(request, RequestOptions.DEFAULT);
- // 3.获取响应结果中的source
- String json = response.getSourceAsString();
-
- ItemDoc itemDoc = JSONUtil.toBean(json, ItemDoc.class);
- System.out.println("itemDoc= " + itemDoc);
- }
-
- @Test
- void testDeleteDocument() throws IOException {
- // 1.准备Request,两个参数,第一个是索引库名,第二个是文档id
- DeleteRequest request = new DeleteRequest("item", "100002644680");
- // 2.发送请求
- client.delete(request, RequestOptions.DEFAULT);
- }
-
- @Test
- void testUpdateDocument() throws IOException {
- // 1.准备Request
- UpdateRequest request = new UpdateRequest("items", "100002644680");
- // 2.准备请求参数
- request.doc(
- "price", 58800,
- "commentCount", 1
- );
- // 3.发送请求
- client.update(request, RequestOptions.DEFAULT);
- }
-
- //批处理
- @Test
- void testLoadItemDocs() throws IOException {
- // 分页查询商品数据
- int pageNo = 1;
- int size = 1000;
- while (true) {
- Page<Item> page = itemService.lambdaQuery().eq(Item::getStatus, 1).page(new Page<Item>(pageNo, size));
- // 非空校验
- List<Item> items = page.getRecords();
- if (CollUtils.isEmpty(items)) {
- return;
- }
- log.info("加载第{}页数据,共{}条", pageNo, items.size());
- // 1.创建Request
- BulkRequest request = new BulkRequest("items");
- // 2.准备参数,添加多个新增的Request
- for (Item item : items) {
- // 2.1.转换为文档类型ItemDTO
- ItemDoc itemDoc = BeanUtil.copyProperties(item, ItemDoc.class);
- // 2.2.创建新增文档的Request对象
- request.add(new IndexRequest()
- .id(itemDoc.getId())
- .source(JSONUtil.toJsonStr(itemDoc), XContentType.JSON));
- }
- // 3.发送请求
- client.bulk(request, RequestOptions.DEFAULT);
-
- // 翻页
- pageNo++;
- }
- }
- }