实现“Java 商品数据存入ES”可以分为以下几个步骤:

  1. 环境准备
  2. 创建Java项目
  3. 导入相关依赖
  4. 连接Elasticsearch
  5. 创建索引和映射
  6. 将商品数据存入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: