做动效网站,定制衣柜十大品牌排名,医生咨询在线24小时免费,微信机器人网站开发作者#xff1a;来自 Elastic Enrico Zimuel
从 elasticsearch-php v8.13.0 开始#xff0c;你可以执行 ES|QL 查询并将结果映射到 stdClass 或自定义类的 PHP 对象。 ES|QL
ES|QL 是 Elasticsearch 8.11.0 中引入的一种新的 Elasticsearch 查询语言。 目前#xff0c;它在…作者来自 Elastic Enrico Zimuel
从 elasticsearch-php v8.13.0 开始你可以执行 ES|QL 查询并将结果映射到 stdClass 或自定义类的 PHP 对象。 ES|QL
ES|QL 是 Elasticsearch 8.11.0 中引入的一种新的 Elasticsearch 查询语言。 目前它在技术预览版中可用。 它提供了一种强大的方法来过滤、转换和分析存储在 Elasticsearch 中的数据。
它利用 “管道” (|) 逐步操作和转换数据。 这种方法允许用户组合一系列操作其中一个操作的输出成为下一个操作的输入从而实现复杂的数据转换和分析。
例如以下查询返回 sample_data 索引的前 3 个文档行
FROM sample_data
| LIMIT 3 使用案例
为了说明官方 PHP 客户端中开发的 ES|QL 功能我们在 Elasticsearch 中存储了包含 81,828 本书 (54.4 MB) 的 CSV 文件其中包括以下信息
Title;Descrition;Author;Year;Publisher;Ratings
我们从公开的亚马逊图书评论数据集中提取了此列表。
我们使用以下 Elasticsearch 映射创建了一个 books 索引
mappings : {properties: {title: {type: text},description: {type: text},author: {type: text},year: {type: short},publisher: {type: keyword},rating: {type: half_float}}
}
rating 值是从 2.9 GB 的 Books_ rating.csv 文件中获取的排名评论的平均值。
在这里您可以找到我们用于批量导入 Elasticsearch 中所有书籍的 PHP 脚本。 使用 PHP 8.2.17 的批量操作需要 7 秒和 28 MB RAM。 根据建议的映射Elasticsearch 中的索引大小约为 62 MB。 映射到对象或自定义类
我们可以使用 esql()-query() 端点在 PHP 中执行 ES|QL 查询。 该查询的结果是一个表数据结构。 这是使用 columns 和 valuse 字段以 JSON 形式表示的。 在 columns 字段中我们有 name 和 type 定义。
下面是一个 ES|QL 查询示例用于检索按用户排名评论排序的 Stephen King 撰写的前 10 本书
$query EODFROM books| WHERE author Stephen King| SORT rating DESC| LIMIT 10
EOD;$result $client-esql()-query([body [query $query]
]);
Elasticsearch 的 JSON 结果如下所示
{columns: [{ name: author, type: text },{ name: description, type: text },{ name: publisher, type: keyword },{ name: rating, type: double },{ name: title, type: text },{ name: year, type: integer }],values: [[Stephen King,The author ...,Turtleback,5.0,How writers write,2002],[Stephen King,In Blockade Billy, a retired coach...,Simon and Schuster,5.0,Blockade,2010],[Stephen King,A chilling collection of twenty horror stories.,Signet Book,4.55859375,Night Shift (Signet),1979],...]
}
在此示例中我们有与一本书相关的 6 个属性作者、描述、出版商、评级、标题、年份和 10 个结果所有书籍均由 Stephen King 撰写。
此处报告了 ES|QL 中所有支持的类型的列表。
$result 响应对象可以作为数组、字符串或对象进行访问请参阅此处了解更多信息。
使用对象接口我们可以使用属性和索引来访问值。 例如$result-values[0][4] 返回列表中第一本书 (0) 的标题 (4)$result-values[1][3] 返回列表中第一本书 (0) 的排名分数 (3)第二本书1等 请记住PHP 中数组的索引从零开始。
这个接口对于某些用例来说已经足够好了但大多数时候我们希望得到一个对象数组。
要将结果映射到对象数组中我们可以使用 elasticsearch-php 的新 mapTo() 功能。
该函数可直接在Elasticsearch 响应对象中使用。 这意味着你可以按如下方式访问它
$books $result-mapTo(); // Array of stdClass
foreach ($books as $book) {printf(%s, %s, %d, Rating: %.2f\n,$book-author,$book-title,$book-year,$book-rating);
}
如果你有自定义 Book 类则可以使用它来映射结果如下所示
class Book
{public string $author;public string $title;public string $description;public int $year;public float $rating;
}$books $result-mapTo(Book::class); // Array of Book
如果你的类除了 ES|QL 结果中包含的属性之外还有其他属性那么这也将起作用。 mapTo() 函数将仅使用作为 ES|QL 结果的列返回的属性。
您可以在此处下载本文中报告的所有示例。
准备好将 RAG 构建到你的应用程序中了吗 想要尝试使用向量数据库的不同 LLMs 在 Github 上查看我们的 LangChain、Cohere 等示例笔记本并参加即将开始的 Elasticsearch 工程师培训