实现“Java 商品数据存入ES”可以分为以下几个步骤:
- 环境准备
- 创建Java项目
- 导入相关依赖
- 连接Elasticsearch
- 创建索引和映射
- 将商品数据存入ES
具体每一步需要做什么,下面是详细的解释和相应的代码示例:
1. 环境准备
首先,确保你已经安装了Java开发环境和Elasticsearch。可以在官网上下载并按照指引进行安装。
2. 创建Java项目
使用你熟悉的IDE(例如Eclipse、IntelliJ IDEA等)创建一个新的Java项目。
3. 导入相关依赖
在项目的pom.xml文件中添加Elasticsearch以及相关的Java客户端依赖:
<dependencies>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.9.3</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.9.3</version>
</dependency>
</dependencies>
然后运行mvn clean install
命令,让Maven自动下载并导入相关依赖。
4. 连接Elasticsearch
在Java代码中,使用RestHighLevelClient
来连接Elasticsearch,并指定Elasticsearch集群的地址和端口号:
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
public class ElasticsearchClient {
private static final String HOST = "localhost";
private static final int PORT = 9200;
public static RestHighLevelClient createClient() {
RestClientBuilder builder = RestClient.builder(new HttpHost(HOST, PORT, "http"));
return new RestHighLevelClient(builder);
}
}
上述代码创建了一个RestHighLevelClient
对象,通过HttpHost
指定了Elasticsearch集群的地址和端口号。
5. 创建索引和映射
在将商品数据存入ES之前,需要先创建一个索引,并定义该索引的映射。以下是一个示例代码,创建名为products
的索引,并定义了商品的名称、价格和库存等字段:
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import java.io.IOException;
public class CreateIndex {
private static final String INDEX_NAME = "products";
public static void createIndex() throws IOException {
RestHighLevelClient client = ElasticsearchClient.createClient();
CreateIndexRequest request = new CreateIndexRequest(INDEX_NAME);
XContentBuilder mapping = XContentFactory.jsonBuilder()
.startObject()
.startObject("properties")
.startObject("name")
.field("type", "text")
.endObject()
.startObject("price")
.field("type", "double")
.endObject()
.startObject("stock")
.field("type", "integer")
.endObject()
.endObject()
.endObject();
request.mapping(mapping);
CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);
System.out.println("Create index " + INDEX_NAME + ": " + response.isAcknowledged());
client.close();
}
}
上述代码中使用了XContentBuilder
来创建索引的映射,通过field
方法来定义字段的类型。
6. 将商品数据存入ES
最后一步是将商品数据存入ES。以下是一个示例代码,将商品名称为"iPhone 12",价格为9999,库存为100的商品存入ES:
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;
import java.io.IOException;
public class SaveProduct {
private static final String INDEX_NAME = "products";
public static void saveProduct() throws IOException {
RestHighLevelClient client = ElasticsearchClient.createClient();
IndexRequest request = new IndexRequest(INDEX_NAME);
request.source("{\"name\":\"iPhone 12\",\"price\":9999,\"stock\":100}", XContentType.JSON);
IndexResponse response = client.index(request, RequestOptions.DEFAULT);
System.out.println("Save product: