视频

了解更多
生活在一个大多数人没有智能手机就难以出门的世界里,这意味着我们随时都能接触到谷歌。只需在谷歌搜索引擎上进行搜索查询,我们就能立即找到几乎任何问题的答案。
搜索引擎(及其对无限信息的访问)已经融入日常生活,使得我们中的许多人非常依赖它们。为了达到最佳效果,由于谷歌和其他科技巨头设定的高标准,对查询的回答需要立即检索。
任何滞后、延迟或拖延都会影响用户的体验,这就是为什么这个 Launchpad 应用程序 Alexis 使用 Redis 作为主要数据库来克服这个障碍。
该应用程序的创始人 Bobby Donchev 利用 RedisAI 和 RediSearch 的强大功能,从语料库中检索信息,以最大限度地提高查询效率。用户能够索引 PDF,并使用简单的 UI 从他们的文档中提取信息。
如果没有 Redis,整个搜索过程将会变得缓慢,从而影响 Alexis 的功能。让我们来看看 Bobby 是如何将这个应用程序组合起来的。
但是,在继续之前,我们想强调的是,我们还有一系列很棒的应用程序供您在 Redis Launchpad 上查看。所以一定要去看看!
你将构建一个高效的文本排名器,能够以最快的速度检索搜索查询。用户将能够利用此应用程序索引重要的 PDF,并轻松地从他们的文档中提取答案。
我们将按时间顺序逐步介绍每个步骤,并突出显示构建应用程序所需的组件。
提供搜索者查询的答案分两步进行
通过在第一步中使用 RediSearch,您将大大减少搜索空间。这将使应用程序的整体体验更快。此后,您需要在后端使用带有 typescript 的 NodeJS,在前端使用带有 typescript 的 React。
除了使用 RedisAI 和 RediSearch 之外,您还将利用 RedisJSON 来构建用户模型,以及使用 Redis Streams 实现的异步工作程序。
Web 服务器通过具有以下端点的 express 框架公开
POST /v1/users
POST /v1/login
POST /v1/logout
GET /v1/me
POST /pdf (pdfUpload)
POST /v1/query
注册并登录到应用程序后,您将能够开始将文档添加到索引库。当 PDF 上传时,事件将被写入 Redis Streams。然后,来自消费者组的某个人将获取该事件以进行异步处理。
然后,您可以处理 PDF,应用一些清理,并将 PDF 存储在 Redis 哈希中,该哈希已使用 RediSearch 编入索引。现在,您将能够向服务器发送自然查询,并且不会局限于基本关键字搜索,例如“kubernetes deployments”、“DDD root aggregate”等。
相反,你将能够查询更相关的搜索。
流程图
以下是 Alexis 功能的总体概述。
现在让我们分解一下流程图中上传 PDF 并索引 PDF 内容和回答查询部分是如何运作的。
git clone https://github.com/redis-developer/alexis
将目录更改为 alexis 并运行以下命令
npm install
以下命令将引导服务器和客户端应用程序,并且还将初始化 Redis 服务器以及 RedisInsight GUI
npm run bootstrap
npm start
打开 http://localhost:3000 以访问该应用程序
RedisInsight 是一种可视化工具,可让您与 Redis 数据库进行基于 GUI 和 CLI 的交互,并在开发基于 Redis 的应用程序时执行更多操作。它是一个功能齐全的纯桌面 GUI 客户端,提供设计、开发和优化 Redis 应用程序的功能。单击此处了解有关 RedisInsight 的更多信息
RedisInsight GUI 可以通过以下链接访问:http://localhost:8001
步骤 1:用户数据存储在 RedisJSON 中
{
firstName: string
lastName: string
email: string
password: string
pdfs: Array<{id: string, fileName: string}>
}
步骤 2:使用以下代码为每个用户创建一个 RediSearch 索引
FT.CREATE ax:idx:<userId> on HASH PREFIX 1 ax:pdfs:<userId> SCHEMA content TEXT PHONETIC dm:en
步骤 3:一旦用户上传了 PDF,我们就使用 RedisJSON 更新他的 pdfs 数组
JSON.ARRAPPEND ax:users:<userId> .pdfs {id: pdfId, fileName: <uploadedPdf>}
步骤 4:文件上传还会触发一个事件,该事件被写入到 ax:stream:pdf-processing 流中。流的有效负载是
{
id: string,
fileName: string
}
步骤 5:消费者组中的一个消费者从流中获取事件并处理该文件,还将内容写入哈希中。
HSET ax:pdfs:<userId>.<paragraph> content <cleanedParagraphBlock> fileName <pdfFileName>
在此应用程序中,每个用户都有一个 RediSearch 索引,该索引索引了上面的哈希。这提供了查找功能,可以将相关内容与用户的查询相匹配。使用以下代码分析内容
FT.SEARCH ax:idx:<userId> '@content:<userQuery>' SCORER BM25 WITHSCORES LIMIT 0 4
然后将 RediSearch 检索的内容传输到 RedisAI 进行分析。
创建一个帐户
当您打开 Alexis 应用程序时,您将被定向到登录门户(请参见下图)。如果您还没有帐户,您将有机会从底部的超链接创建一个新帐户。
登录后,您将被带到门户上的另一个页面。如果这是您第一次访问该门户,则库中不会有任何文档。下一步是将它们导入到应用程序中。
将文档导入到您的库中
要开始此过程,您可以将文档拖放到屏幕中央的框中,或者单击云图标手动拉取它们。
上传文档后,您将在屏幕左侧看到标题,确认文档已存储(见下图)。
发生这种情况时,PDF 会上传到服务器,并在后台进行清理。 由于 Redis 的高级功能,这个过程非常高效。
提出您的查询
正如您从上图中所见,您只需输入您希望应用程序检索的查询。 在此示例中,用户直接询问文件内容是什么,输入了“旅程是关于什么的?”
提交查询后,您将立即获得一些答案,每个答案都根据其相关性按等级排序(见下例)。
归根结底,每个人都希望搜索查询能够立即完成,没有任何延迟。 毕竟这是数字时代,任何延迟只会将用户推向更优化的事物。
通过使用 Redis,Alexis 能够以优质标准运行。 借助 RediSearch,可以快速有效地收集不同位置最有意义的内容。 并且 RedisAI 的超高级功能能够筛选这些内容,并为用户提供与其查询最相关和最准确的答案。
如果您想了解更多关于此应用程序是如何制作的,那么您应该查看 Bobby 的 YouTube 视频。 我们还有各种各样的应用程序供您在 Redis Launchpad 上获取灵感。
从创建 赫尔辛基的实时公交跟踪系统 到 保护发展中国家的作物保险公司,来自世界各地的程序员都在利用 Redis 的奇妙之处来改变日常生活。 您也可以这样做!
Bobby 是一位充满活力的编程工程师,在为客户设计和实施系统方面拥有超过 12 年的经验。
请务必浏览他的 GitHub 页面,以便及时了解他参与的所有项目。