dot 快速的未来即将在您所在的城市举办的活动中到来。

加入我们参加 Redis 发布会

如何使用 Redis 创建强大的文本排名器

在大多数人离开家时都会随身携带智能手机的世界里,Google 无处不在。我们可以在一瞬间通过 Google 搜索引擎上的搜索查询找到几乎任何问题的答案。 

搜索引擎(及其对无限信息的访问)已融入日常生活,使我们许多人极度依赖它们。为了使搜索引擎达到最佳状态,需要立即检索查询的答案,这是 Google 和其他科技巨头设定的高标准。 

任何延迟、滞后或拖延都会影响用户的体验,这就是为什么 Launchpad 应用程序 Alexis 使用 Redis 作为主要数据库来克服这一障碍。 

该应用程序的创始人 Bobby Donchev 利用了 RedisAI 和 RediSearch 的强大功能,以最大效率从语料库中检索查询的答案。用户能够索引 PDF 并使用简单的 UI 从其文档中提取信息。 

如果没有 Redis,整个搜索过程将变得缓慢,从而影响 Alexis 的功能。让我们看看 Bobby 是如何将这个应用程序组合在一起的。 

但是,在继续之前,我们要强调,我们还提供了一系列很棒的应用程序供您在 Redis Launchpad 上查看。所以一定要看看!

https://www.youtube.com/embed/0L8gvs7whhk
  1. 您将构建什么?
  2. 您需要什么?
  3. 架构
  4. 入门
  5. 数据存储方式
  6. 数据访问方式
  7. 工作原理

1. 您将构建什么?

您将构建一个高效的文本排名器,能够以最高速度检索搜索查询。用户能够利用此应用程序轻松地索引重要的 PDF 并从其文档中提取答案。 

我们将按时间顺序逐步介绍每个步骤,并重点介绍构建应用程序所需的组件。 

2. 您需要什么?

  • RediSearch: 索引、查询和全文搜索引擎 
  • RedisAI: 执行深度学习/机器学习模型来管理数据并降低延迟
  • Redis Streams: 管理数据使用 
  • NodeJS: 用作开源跨平台,在 Web 浏览器外部执行 JavaScript 代码
  • RedisJSON: 将 ECMA-404 JSON 数据交换标准实现为本机数据类型。

3. 架构

为搜索者提供答案分两个步骤完成

  1. 首先,您选择可能包含答案的文本。您将不得不为此步骤使用带有 BM25 排名函数的 RediSearch。 
  2. 您可以使用加载到 RedisAI 中的 Transformer AI 模型来识别文本中的答案范围。 

通过在第一步中使用 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 内容”和“回答查询”部分是如何运作的。

回答查询

  • 用户在 UI 上输入一个查询,然后将其发送到 RediSearch
  • 然后使用关键字激活 RediSearch 和 BM25 函数以查找最有意义的内容。 
  • 然后将此内容与查询一起传输到 RedisAI,以进行比较并确定哪个答案与用户的查询最相关。

 上传 PDF 并索引 PDF 内容

  • 用户在搜索引擎中输入问题。 
  • RediSearch 索引 PDF 并搜索此查询的答案。
  • RedisAI 运行推理并提取一些可能的答案。
  • 然后 RedisAI 比较每个答案并确定哪个答案与查询最相关。 
  • 最终将答案显示给用户。

4. 入门

步骤 1:安装先决条件

  • Node - v12.x.x
  • NPM - v6.x.x
  • Docker 和 Docker-compose

步骤 2. 克隆存储库

git clone https://github.com/redis-developer/alexis

步骤 3:安装依赖项

将目录更改为 alexis 并运行以下命令

npm install

步骤 4. 设置前端和后端

以下命令将引导服务器和客户端应用程序,并初始化 Redis 服务器以及 RedisInsight GUI

npm run bootstrap

步骤 5. 启动应用程序

npm start

步骤 6. 访问应用程序

打开 http://localhost:3000 访问应用程序

步骤 7. 访问 RedisInsight

RedisInsight 是一款可视化工具,可让您在开发基于 Redis 的应用程序时进行基于 GUI 和 CLI 的 Redis 数据库交互,以及更多操作。它是一款功能齐全的纯桌面 GUI 客户端,提供设计、开发和优化 Redis 应用程序的功能。 点击此处详细了解 RedisInsight

您可以通过以下链接访问 RedisInsight GUI:http://localhost:8001

5. 数据存储方式

步骤 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>

6. 数据访问方式

在此应用程序中,每个用户都有一个 RediSearch 索引,用于索引上述哈希。这提供了查找功能,以将相关内容与用户的查询匹配。使用以下代码分析内容

FT.SEARCH ax:idx:<userId> '@content:<userQuery>' SCORER BM25 WITHSCORES LIMIT 0 4

然后将 RediSearch 检索到的内容传输到 RedisAI 进行分析。

7. 工作原理

创建帐户

打开 Alexis 应用程序时,您将被定向到登录门户(请参见下图)。如果您还没有帐户,您可以通过底部的超链接创建新帐户。

登录后,您将被带到门户的另一个页面。如果您是第一次访问门户,则您的库中将没有任何文档。下一步将是将它们导入应用程序。 

将文档导入您的库

要开始此过程,您可以将文档拖放到屏幕中央的方框中,或者通过单击云图标手动将其拉起。

上传文档后,您将通过屏幕左侧显示其标题来收到存储确认(请参见下文)。

发生这种情况时,PDF 将上传到服务器,并在后台进行清理。由于 Redis 的高级功能,此过程非常高效。

提出您的查询

从上面的图像中可以看出,您只需输入要让应用程序检索的查询即可。在此示例中,用户通过输入“这篇旅程是关于什么的?”直接询问了文件的内容。

提交查询后,您将立即获得几个答案,每个答案都根据其相关性按层次结构排序(见下例)。

结论:使用 Redis 简化搜索

归根结底,每个人都希望搜索查询是即时的,没有任何延迟毕竟,这是数字时代,任何延迟只会将用户推开,转向更优化的东西。 

通过使用 Redis,Alexis 能够以高级标准运行。由于 RediSearch,从不同位置收集最有意义的内容变得快速而高效。RedisAI 的超高级功能能够筛选这些内容,并为用户提供与其查询最相关和最准确的答案。 

如果您想了解更多关于此应用程序是如何制作的,请查看 Bobby 的 YouTube 视频。我们还提供各种应用程序,供您在 Redis Launchpad 上获得灵感。 

从创建 赫尔辛基的实时公交跟踪系统保护发展中国家的作物保险公司,来自世界各地的程序员正在利用 Redis 的神奇力量来改变日常生活。你也可以做到!

谁创建了这个应用程序?

Bobby Donchev

Bobby 是一位充满活力的编程工程师,拥有超过 12 年的客户系统设计和实施经验。 

请务必查看他的 GitHub 页面,了解他参与的所有项目。