赞
踩
在最近的一篇文章中,Laura 重点介绍了如何使用 Java Elasticsearch 客户端来制作 ES|QL 查询并将其结果解析为原生 Java 对象。即将发布的 8.14.0 版 JavaScript 客户端将提供类似的功能(支持 TypeScript)。让我们来看看如何使用它:
首先,让我们使用批量助手来索引一些数据:
- const client = new Client({
- node: "http://localhost:9200",
- const client = new Client({
- node: elasticsearchEndpoint,
- auth: {
- apiKey: elasticsearchApiKey
- }
- });
- })
-
- await client.helpers.bulk({
- datasource: [
- { name: "Revelation Space", author: "Alastair Reynolds", release_date: "2000-03-15", page_count: 585 },
- { name: "1984", author: "George Orwell", release_date: "1985-06-01", page_count: 328 },
- { name: "Fahrenheit 451", author: "Ray Bradbury", release_date: "1953-10-15", page_count: 227 },
- { name: "Brave New World", author: "Aldous Huxley", release_date: "1932-06-01", page_count: 268 },
- ],
- onDocument(_doc) {
- return { index: { _index: "books" } }
- },
- })
现在,让我们使用一个非常基本的 ES|QL 查询来查看这些新索引的文档:
- const response = await client.esql.query({ query: 'FROM books' })
- /*
- Returns:
- {
- columns: {
- { name: "name", type: "keyword" },
- { name: "author", type: "keyword" },
- { name: "release_date", type: "date" },
- { name: "page_count", type: "integer" },
- },
- values: [
- [ "Revelation Space", "Alastair Reynolds", "2000-03-15", 585 ],
- [ "1984", "George Orwell", "1985-06-01", 328 ],
- [ "Fahrenheit 451", "Ray Bradbury", "1953-10-15", 227 ],
- [ "Brave New World", "Aldous Huxley", "1932-06-01", 268 ],
- ],
- }
- */
将每行返回为值数组是一个简单的默认设置,在许多情况下很有用。不过,如果你想要一个记录数组(JavaScript 应用程序中的标准结构),则需要额外的努力来转换数据。
幸运的是,在 8.14.0 中,JavaScript 客户端将包含一个新的 ES|QL 助手来为你执行此操作:
- const { records } = await client.helpers.esql({ query: 'FROM books' }).toRecords()
- /*
- Returns:
- [
- { name: "Revelation Space", author: "Alastair Reynolds", release_date: "2000-03-15", page_count: 585 },
- { name: "1984", author: "George Orwell", release_date: "1985-06-01", page_count: 328 },
- { name: "Fahrenheit 451", author: "Ray Bradbury", release_date: "1953-10-15", page_count: 227 },
- { name: "Brave New World", author: "Aldous Huxley", release_date: "1932-06-01", page_count: 268 },
- ]
- */
如果你使用 TypeScript,则可以内联声明结果的类型:
- type Book = {
- name: string,
- author: string,
- release_date: string,
- page_count: number,
- }
- // Returns `records` as `Book[]`
- const { records } = await client.helpers.esql({ query: 'FROM books' }).toRecords<Book>()
在另一种情况下,你可能需要声明与查询结果不完全匹配的类型。也许键和列的名称不同,或者返回的文档包含你类型中不存在的列。在这种情况下,我们可以使用 ES|QL RENAME 和 KEEP 处理命令来修改结果以更好地适合你的类型:
- type Book = {
- name: string,
- author: string,
- released: string,
- }
- const query = `FROM books | DROP page_count | RENAME release_date AS released`
- const { records } = await client.helpers.esql({ query }).toRecords<Book>()
这些是相对简单的例子,重点介绍了如何在 JavaScript 客户端中使用新的 ES|QL 帮助程序,因此请查看文档以获取完整详细信息。JavaScript 客户端的未来版本可能会包含更多 ES|QL 帮助程序,例如使用生成器对大型结果集进行分页,以及对 Apache Arrow 的支持。
我们所有的官方客户端都计划包含类似的帮助程序和工具,以使使用 ES|QL 查询尽可能简单。在未来几周和几个月内查看你首选客户端的更新日志!
准备好自己尝试一下了吗?开始免费试用。
Elasticsearch 集成了 LangChain、Cohere 等工具。加入我们的高级语义搜索网络研讨会,构建你的下一个 GenAI 应用程序!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。