dot Redis 8 来了——并且是开源的

了解更多

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

生活在一个大多数人没有智能手机就难以出门的世界里,这意味着我们随时都能接触到谷歌。只需在谷歌搜索引擎上进行搜索查询,我们就能立即找到几乎任何问题的答案。 

搜索引擎(及其对无限信息的访问)已经融入日常生活,使得我们中的许多人非常依赖它们。为了达到最佳效果,由于谷歌和其他科技巨头设定的高标准,对查询的回答需要立即检索。 

任何滞后、延迟或拖延都会影响用户的体验,这就是为什么这个 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. 首先,选择可能包含答案的文本。您必须将 RediSearch 与 BM25 排名函数一起使用来完成此步骤。 
  2. 您可以使用加载到 RedisAI 中的 Transformer AI 模型来识别文本中的答案跨度。 

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

回答查询

  • 用户在 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 页面,以便及时了解他参与的所有项目。