使用 Redis 进行自动完成

了解如何使用 Redis 的自动完成功能来高效地检索基于前缀的建议。

概述

Redis 查询引擎提供了一项自动完成功能,该功能使用存储在trie 树结构中的建议。此功能允许您根据用户输入前缀存储和检索带有排名的建议,对于搜索框、命令完成和聊天机器人响应等应用非常有用。

本指南介绍了如何使用 FT.SUGADDFT.SUGGETFT.SUGDELFT.SUGLEN 命令来实现自动完成,以及一些如何将这些命令与 FT.SEARCH 结合使用的示例。

添加自动完成建议

要将短语或单词添加到建议字典中,请使用 FT.SUGADD 命令。您将为每个条目分配一个分数,该分数决定了其在结果中的排名。

FT.SUGADD autocomplete "hello world" 100
FT.SUGADD autocomplete "hello there" 90
FT.SUGADD autocomplete "help me" 80
FT.SUGADD autocomplete "hero" 70

上述示例中使用了整数分数,但分数参数被描述为浮点数。整数分数在内部转换为浮点数。此外,上述示例中的 "autocomplete" 只是键的名称;您可以使用任何您想要的键名。

可选参数

FT.SUGADD 命令可以接受两个可选参数

  • INCR:按给定的分数递增现有建议条目的分数,而不是替换分数。这对于根据用户查询实时更新字典非常有用。
  • PAYLOAD:与建议一起保存一个字符串,可以通过向 FT.SUGGET 添加 WITHPAYLOADS 参数来获取。

检索建议

要获取给定前缀的自动完成建议,请使用 FT.SUGGET 命令。

redis> FT.SUGGET autocomplete "he"
1) "hero"
2) "help me"
3) "hello world"
4) "hello there"

如果您希望看到分数,请使用 WITHSCORES 选项

redis> FT.SUGGET autocomplete "he" WITHSCORES
1) "hero"
2) "40.414520263671875"
3) "help me"
4) "32.65986251831055"
5) "hello world"
6) "31.62277603149414"
7) "hello there"
8) "28.460498809814453"

启用模糊匹配

如果您想允许小的拼写错误或输入错误,请使用 FUZZY 选项。此选项执行模糊前缀搜索,包括与提供的前缀 Levenshtein 距离为 1 的前缀。

redis> FT.SUGGET autocomplete hell FUZZY
1) "hello world"
2) "hello there"
3) "help me"

可选参数

您可以与 FT.SUGGET 一起使用三个额外的参数

  • MAX num:将结果限制为最多 num 个。MAX 的默认值为 5。
  • WITHSCORES:返回每个建议的分数。
  • WITHPAYLOADS:返回与建议一起保存的可选负载。如果某个条目没有负载,则返回 nil 回复。
    redis> FT.SUGADD autocomplete hero 70 PAYLOAD "you're no hero"
    (integer) 4
    redis> FT.SUGGET autocomplete "hr" FUZZY WITHPAYLOADS
    1) "hero"
    2) "you're no hero"
    3) "help me"
    4) (nil)
    5) "hello world"
    6) (nil)
    7) "hello there"
    8) (nil)
    

删除建议

要从字典中删除特定的建议,请使用 FT.SUGDEL 命令。

redis> FT.SUGDEL autocomplete "help me"
(integer 1)

删除后,运行 FT.SUGGET autocomplete hell FUZZY 将不再返回 "help me"。

检查建议数量

要获取给定建议字典中的条目数量,请使用 FT.SUGLEN 命令。

redis> FT.SUGLEN autocomplete
(integer) 3

一种常见的方法是

  1. 当用户在文本字段中输入时,使用 FT.SUGGET 建议查询完成。
  2. 用户选择建议后,使用选定的术语运行 FT.SEARCH 以获取完整的搜索结果。

示例工作流程

  1. 获取给定用户输入的建议。

    FT.SUGGET autocomplete "hel"
    
  2. 捕获用户的选择。

  3. 在全文搜索中使用选定的建议。

    FT.SEARCH index "hello world"
    
  • 当您需要快速、实时的基于前缀的建议检索时,请使用 FT.SUGGET
  • 当您需要基于相关性的文档检索、过滤和排名时,请使用 FT.SEARCH

自动完成用例

Redis 查询引擎中的自动完成功能适用于

  • 搜索框建议:在用户输入时提供实时建议。
  • 命令完成:为 CLI 工具提供自动完成功能。
  • 产品搜索:在电子商务应用中建议产品名称。
  • 聊天机器人响应:动态推荐常用短语。
评价此页面
返回顶部 ↑