1、创建索引:PUT fmmallproductsindex,所有单词要求小写
CreateIndexRequest fmmallProductsIndex = new CreateIndexRequest("fmmallproductsindex"); CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(fmmallProductsIndex, RequestOptions.DEFAULT); System.out.println(createIndexResponse.isAcknowledged());
2、删除索引:DELETE fmmallproductsindex
DeleteIndexRequest index = new DeleteIndexRequest("fmmallproductsindex"); AcknowledgedResponse delete = restHighLevelClient.indices().delete(index, RequestOptions.DEFAULT); System.out.println(delete.isAcknowledged());
3、添加文档:一定要使用实体添加,否则添加字段名不对会导致所有自动添加字段
POST index4/_doc/2 { "bookId": 102, "bookName": "C++程序设计", "author": "谭浩强", "time": 1704623538911 }
Product product = new Product(1, "咪咪虾条", 2.00, "美味的海鲜虾条"); IndexRequest index6 = new IndexRequest("bar"); index6.id(product.getProductId() + ""); index6.source(objectMapper.writeValueAsString(product), XContentType.JSON); IndexResponse index = restHighLevelClient.index(index6, RequestOptions.DEFAULT); System.out.println(index.status().getStatus());
4、批量添加文档:
BulkRequest bulkRequest = new BulkRequest(); Product product = new Product(1, "加丽加虾条", 6.00, "比奥利奥好吃的饼干"); IndexRequest index1 = new IndexRequest("index6"); index1.id(product.getProductId() + ""); index1.source(objectMapper.writeValueAsString(product), XContentType.JSON); bulkRequest.add(index1); Product product2 = new Product(2, "旺旺小饼干", 12.00, "旺旺"); IndexRequest index2 = new IndexRequest("index6"); index2.id(product2.getProductId() + ""); index2.source(objectMapper.writeValueAsString(product2), XContentType.JSON); bulkRequest.add(index2); BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
关于如下结构的实体添加到es,list会会被简单的扁平化为字段名称对应的数组对象结构
@Data @AllArgsConstructor @NoArgsConstructor public class Product4Es { private String productId; private String productName; private List<String> productsImg; private List<ProductSku4Es> productSku4Es; }
如果想存nested结构则需要事先建好索引,或者使用索引模板来创建,才会保存为nested的结构
如下则会创建为nested结构
1、先建索引模板
PUT _template/template_1?create=false&order=0 { "index_patterns": [ "fmmall*", "bar*" ], "settings": { "number_of_shards": 1 }, "order": 0, "mappings": { "properties": { "productId": { "type": "long" }, "productName": { "type": "text" }, "productsImg": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "productSku4Es": { "type": "nested", "properties": { "skuId": { "type": "long" }, "skuName": { "type": "text" }, "sellPrice": { "type": "float" } } } } } }
2、批量添加数据
List<Product4Es> product4Es = productMapper.selectProduct4Es(); BulkRequest bulkRequest = new BulkRequest(); for (Product4Es product4E : product4Es) { IndexRequest index = new IndexRequest("fmmallproductsindex"); index.id(product4E.getProductId() + ""); index.source(objectMapper.writeValueAsString(product4E), XContentType.JSON); bulkRequest.add(index); } BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT); System.out.println(bulk.status().getStatus());