视频

了解更多
在大多数人离开家时都会随身携带智能手机的世界里,Google 无处不在。我们可以在一瞬间通过 Google 搜索引擎上的搜索查询找到几乎任何问题的答案。
搜索引擎(及其对无限信息的访问)已融入日常生活,使我们许多人极度依赖它们。为了使搜索引擎达到最佳状态,需要立即检索查询的答案,这是 Google 和其他科技巨头设定的高标准。
任何延迟、滞后或拖延都会影响用户的体验,这就是为什么 Launchpad 应用程序 Alexis 使用 Redis 作为主要数据库来克服这一障碍。
该应用程序的创始人 Bobby Donchev 利用了 RedisAI 和 RediSearch 的强大功能,以最大效率从语料库中检索查询的答案。用户能够索引 PDF 并使用简单的 UI 从其文档中提取信息。
如果没有 Redis,整个搜索过程将变得缓慢,从而影响 Alexis 的功能。让我们看看 Bobby 是如何将这个应用程序组合在一起的。
但是,在继续之前,我们要强调,我们还提供了一系列很棒的应用程序供您在 Redis Launchpad 上查看。所以一定要看看!
您将构建一个高效的文本排名器,能够以最高速度检索搜索查询。用户能够利用此应用程序轻松地索引重要的 PDF 并从其文档中提取答案。
我们将按时间顺序逐步介绍每个步骤,并重点介绍构建应用程序所需的组件。
为搜索者提供答案分两个步骤完成
通过在第一步中使用 RediSearch,您将大大减少搜索空间。这将使应用程序的整体体验更快。在此之后,您需要在后端使用 NodeJS 与 typescript,在前端使用 React 与 typescript。
除了使用 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 存储在使用 RediSearch 索引的 Redis 哈希中。现在,您可以向服务器发送自然查询,并且不会局限于诸如“kubernetes 部署”、“DDD 根聚合”等基本关键字搜索。
相反,您将能够查询更相关的搜索。
流程图
以下是 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 页面,了解他参与的所有项目。