Java 客户端中的 ES|QL
编辑Java 客户端中的 ES|QL
编辑此页面帮助您了解和使用 Java 客户端中的 ES|QL。
有两种方法可以在 Java API 客户端中使用 ES|QL
- 直接使用 Elasticsearch ES|QL API:这是最灵活的方法,但也是最复杂的方法,因为您必须以原始形式处理结果。您可以选择结果的精确格式,例如 JSON、CSV 或文本。
- 使用 ES|QL 映射助手:这些映射器负责将原始响应解析为应用程序可以直接使用的内容。有几个映射器可用于不同的用例,例如对象映射、结果的光标遍历和数据帧。您还可以为特定用例定义自己的映射器。
如何使用 ES|QL API
编辑ES|QL 查询 API 允许您指定结果的返回方式。您可以选择 响应格式,例如 CSV、文本或 JSON,然后使用列分隔符和区域设置等参数对其进行微调。
由于响应根据格式而有很大差异,因此 Java API 客户端有一个 BinaryData 对象,您可以根据请求中指定的格式使用它。
以下示例获取 ES|QL 结果作为 CSV 并对其进行解析
String queryAuthor = """ from books | where author == "Isaac Asimov" | sort year desc | limit 10 """; BinaryResponse response = client.esql().query(q -> q .format("csv") .delimiter(",") .query(queryAuthor)); String result = new BufferedReader(new InputStreamReader(response.content())) .lines().collect(Collectors.joining("\n"));
使用 ES|QL 结果
编辑前面的示例表明,尽管原始 ES|QL API 提供了最大的灵活性,但为了利用结果数据,还需要进行额外的工作。
为了简化操作,尝试使用 ES|QL 结果的这三种主要表示形式(每个都有自己的映射助手)
-
对象,其中结果中的每一行都映射到应用程序域中的一个对象。这类似于 ORM(对象关系映射器)通常执行的操作。
List<Book> queryRes = (List<Book>) client.esql().query(ObjectsEsqlAdapter.of(Book.class), queryAuthor);
-
光标,您可以在其中逐行扫描结果并使用列名访问数据。这类似于数据库访问库。
ResultSet resultSet = client.esql().query(ResultSetEsqlAdapter.INSTANCE, queryAuthor);
定义自己的映射
编辑尽管 Java API 客户端提供的映射器涵盖了许多用例,但您的应用程序可能需要自定义映射。您可以编写自己的映射器并以类似于内置映射器的方式使用它。
请注意,映射器旨在提供 ES|QL 结果的更易于使用的表示形式,而不是处理结果数据。数据处理应基于结果映射器的输出。
这是一个返回数据的简单列导向表示的示例映射器
public class CustomStringAdapter extends EsqlAdapterBase<String> { public static final CustomStringAdapter INSTANCE = new CustomStringAdapter(); @Override public String format() { return "json"; } @Override public boolean columnar() { return true; } @Override public String deserialize(ApiClient<ElasticsearchTransport, ?> client, QueryRequest request, BinaryResponse response) throws IOException { return new BufferedReader(new InputStreamReader(response.content())) .lines().collect(Collectors.joining("\n")); } }