根据 ID 读取文档

编辑

Elasticsearch 主要用于搜索,但您可能也需要直接访问文档,前提是知道它们的标识符。“get”请求就是为此而设计的。

请参阅 Elasticsearch API 文档,了解 get 请求的完整说明。

读取领域对象

编辑

下面的示例从 products 索引中读取标识符为 bk-1 的文档。

get 请求有两个参数

  • 第一个参数是实际的请求,下面使用流畅的 DSL 构建
  • 第二个参数是我们希望将文档的 JSON 映射到的类。
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

读取原始 JSON

编辑

如果您的索引包含半结构化数据,或者您没有领域对象定义,您也可以将文档读取为原始 JSON 数据。

原始 JSON 数据只是另一个类,您可以将其用作 get 请求的结果类型。在下面的示例中,我们使用 Jackson 的 ObjectNode。我们也可以使用任何可以由与 ElasticsearchClient 关联的 JSON 映射器反序列化的 JSON 表示。

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

if (response.found()) {
    ObjectNode json = response.source();
    String name = json.get("name").asText();
    logger.info("Product name " + name);
} else {
    logger.info("Product not found");
}

目标类是原始 JSON 对象。

上述示例的源代码可以在 Java API 客户端测试 中找到。