入门

编辑

此页面指导您完成 Java 客户端的安装过程,展示如何实例化客户端,以及如何使用它执行基本的 Elasticsearch 操作。

要求

编辑
  • Java 8 或更高版本。
  • 一个 JSON 对象映射库,以允许您的应用程序类与 Elasticsearch API 无缝集成。以下示例展示了与 Jackson 的用法。

安装

编辑

在 Gradle 项目中使用 Jackson 进行安装

编辑
dependencies {
    implementation 'co.elastic.clients:elasticsearch-java:8.17.0'
    implementation 'com.fasterxml.jackson.core:jackson-databind:2.17.0'
}

在 Maven 项目中使用 Jackson 进行安装

编辑

在您的项目的 pom.xml 中,添加以下存储库定义和依赖项

<project>
  <dependencies>

    <dependency>
      <groupId>co.elastic.clients</groupId>
      <artifactId>elasticsearch-java</artifactId>
      <version>8.17.0</version>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.17.0</version>
    </dependency>

  </dependencies>
</project>

请参阅 安装 页面以了解更多信息。

连接

编辑

您可以使用 API 密钥和 Elasticsearch 端点连接到 Elastic Cloud。

// URL and API key
String serverUrl = "https://127.0.0.1:9200";
String apiKey = "VnVhQ2ZHY0JDZGJrU...";

// Create the low-level client
RestClient restClient = RestClient
    .builder(HttpHost.create(serverUrl))
    .setDefaultHeaders(new Header[]{
        new BasicHeader("Authorization", "ApiKey " + apiKey)
    })
    .build();

// Create the transport with a Jackson mapper
ElasticsearchTransport transport = new RestClientTransport(
    restClient, new JacksonJsonpMapper());

// And create the API client
ElasticsearchClient esClient = new ElasticsearchClient(transport);

// Use the client...

// Close the client, also closing the underlying transport object and network connections.
esClient.close();

您的 Elasticsearch 端点可以在您的部署的 我的部署 页面上找到

Finding Elasticsearch endpoint

您可以在“管理”页面下的“安全性”中生成 API 密钥。

Create API key

有关其他连接选项,请参阅 连接 部分。

操作

编辑

是时候使用 Elasticsearch 了!本节将引导您完成 Elasticsearch 的基本且最重要的操作。有关更多操作和更高级的示例,请参阅 使用 Java API 客户端 页面。

创建索引

编辑

这是您创建 product 索引的方式

esClient.indices().create(c -> c
    .index("products")
);

索引文档

编辑

这是一种索引文档的简单方法,这里是一个 Product 应用程序对象

Product product = new Product("bk-1", "City bike", 123.0);

IndexResponse response = esClient.index(i -> i
    .index("products")
    .id(product.getSku())
    .document(product)
);

logger.info("Indexed with version " + response.version());

获取文档

编辑

您可以使用以下代码获取文档

GetResponse<Product> response = esClient.get(g -> g
    .index("products") 
    .id("bk-1"),
    Product.class      
);

if (response.found()) {
    Product product = response.source();
    logger.info("Product name " + product.getName());
} else {
    logger.info ("Product not found");
}

带有索引名称和标识符的 get 请求。

目标类,这里是 Product

搜索文档

编辑

这是您如何使用 Java 客户端创建单个匹配查询的方式

String searchText = "bike";

SearchResponse<Product> response = esClient.search(s -> s
        .index("products")
        .query(q -> q
            .match(t -> t
                .field("name")
                .query(searchText)
            )
        ),
    Product.class
);

更新文档

编辑

这是您可以更新文档的方式,例如添加一个新字段

Product product = new Product("bk-1", "City bike", 123.0);

esClient.update(u -> u
        .index("products")
        .id("bk-1")
        .upsert(product),
    Product.class
);

删除文档

编辑
esClient.delete(d -> d.index("products").id("bk-1"));

删除索引

编辑
esClient.indices().delete(d -> d
    .index("products")
);

示例

编辑

Github 存储库中的 examples 文件夹包含完整的工作示例,展示了如何设置和使用客户端。

进一步阅读

编辑
  • 了解有关 Java 客户端的 API 约定 的更多信息。