当前位置: 首页 > 面试题库 >

Redis自动完成

东方俊材
2023-03-14
问题内容

如何使用Redis实现自动完成功能?

比如说我有一个数组["alfred","joel","jeff","addick"]。当我型a我得到["alfred", "addick"]

我希望你明白这一点。我如何有效地使用redis命令来实现这一点(如果可能,但我认为是)。如果我能通过telnet尝试一些简单的命令来模仿这种行为,那就太好了。

谢谢


问题答案:

如果您要处理的是大型数据集,建议您考虑将其实现。我将一小部分Ruby做到了这一点:

require 'rubygems'
require 'redis'

class RedisTrie
  TERMINAL = '+'

  def initialize(prefix)
    @prefix = prefix
    @r = Redis.new
  end

  def add_word(word)
    w = word.gsub(/[^a-zA-Z0-9_-]/, '')
    key = "#{@prefix}:"

    w.each_char do |c|
      @r.zset_add key, c.bytes.first, c
      key += c
    end

    @r.zset_add key, 0, TERMINAL
  end

  def add_words(*words)
    words.flatten.compact.each {|word| add_word word}
  end

  def suggest(text)
    @r.zset_range("#{@prefix}:#{text}", 0, -1).map do |c|
      (c == TERMINAL) ? text : suggest(text + c)
    end.flatten
  end
end

rt = RedisTrie.new('trie')

rt.add_words %w( apple automobile carwash oil-change cranky five ruthie axe auto )

p rt.suggest(ARGV.shift.to_s)

例如:

$ ruby RedisTrie.rb
["apple", "auto", "automobile", "axe", "carwash", "cranky", "five", "oil-change", "ruthie"]
$ ruby RedisTrie.rb a
["apple", "auto", "automobile", "axe"]
$ ruby RedisTrie.rb au
["auto", "automobile"]
$ ruby RedisTrie.rb aux
[]

在Wikipedia的Tries条目上阅读有关Tries的更多信息。

您肯定会优化您的建议方法,以不返回所有值,而只返回找到的前X个值。这将使迭代整个数据结构的目的无效。



 类似资料:
  • 问题内容: 我必须使用500,000个以上的名称来实现自动完成功能,以后可能会增加到400万个以上的名称。 后端是使用Spring的Java REST Web服务调用。我应该使用 MongoDB , Redis 还是 Elasticsearch 来存储和查询/搜索名称? 问题答案: 这是一个关键的搜索用例,MongoDB和Redis非常适合基于键的查找,而不是用于搜索目的,而Elasticsear

  • 问题内容: 我必须使用500,000个以上的名称来实现自动完成功能,以后可能会增加到400万个以上的名称。 后端是使用Spring的Java REST Web服务调用。我应该使用 MongoDB , Redis 还是 Elasticsearch 来存储和查询/搜索名称? 问题答案: 这是一个关键的搜索用例,MongoDB和Redis非常适合基于键的查找,而不是用于搜索目的,而Elasticsear

  • 自动完成是现代网站中经常使用的一种机制,用于向用户提供他/她在文本框中键入的单词开头的建议列表。 然后,用户可以从列表中选择一个项目,该项目将显示在输入字段中。 此功能可防止用户输入整个单词或一组单词。 JQueryUI提供了一个自动完成窗口小部件 - 一个与下拉列表非常相似的控件,但过滤选项只显示与用户在控件中键入的内容相匹配的选项。 jQueryUI提供了autocomplete()方法,用于

  • md-autocomplete是一个Angular Directive,用作一个特殊的输入控件,带有内置下拉列表,显示与自定义查询的所有可能匹配。 一旦用户键入输入区域,该控件就充当实时建议框。 《md-autocomplete》可用于从本地或远程数据源提供搜索结果。 执行查询时md-autocomplete缓存结果。 第一次调用后,它使用缓存的结果来消除不必要的服务器请求或查找逻辑,并且可以禁用

  • 描述 (Description) 自动填充是Framework7的移动友好和触摸优化组件,可以是下拉列表或独立方式。 您可以使用JavaScript方法创建和初始化自动完成实例 - myApp.autocomplete(parameters) 其中parameters是用于初始化自动完成实例的必需对象。 自动填充参数 下表列出了Framework7中可用的自动填充参数 - S.No 参数和描述

  • 问题内容: 任何人都可以给我完整的步骤来使用jquery-ui自动完成功能。我正在使用grails 2.0.1。 我需要一个完整的示例,包括控制器和视图的代码。 提前致谢。 问题答案: 首先,您需要将main.gsp(在头部)添加到行中 插件将自动下载。 对于完整的示例,您可以使用此链接 http://jay-chandran.blogspot.com/2011/09/using-grails-w