使用 redis 和 Flask 自动完成

Auto Complete using redis and Flask

我是 Redis 和 Redisearch 的新手。 我想在 Flask 应用程序中使用 Redis 创建一个自动完成功能。

以下是我到目前为止尝试过的方法,

autocomplete.py:

import redis
import redisearch
from flask import Flask,request,jsonify,render_template
app = Flask("autocomplete")
#creating a redis connection
r = redis.Redis(host='localhost', port=6379,db=0)

@app.route('/')
def home():
    return "This is Home Page"

#route to add a value to autocomplete list
@app.route('/add')
def addValue():
    try:
        name = request.args.get('name')
        n = name.strip()         
        for l in range(1,len(n)):             
            prefix = n[0:l]             
            r.zadd('compl',{prefix:0})
        r.zadd('compl',{n+"*":0})
        return "Success"
         
    except:
        return "Failed"


#route to get the autocomplete
@app.route('/autocomplete')
def autocomplete():    
    prefix = request.args.get('prefix')
    results = []
    rangelen = 50
    count=5
    start = r.zrank('compl',prefix)    
    if not start:
        return []
    while (len(results) != count):         
         range = r.zrange('compl',start,start+rangelen-1)         
         start += rangelen
         if not range or len(range) == 0:
             break
         for entry in range:
             entry=entry.decode('utf-8')
             minlen = min(len(entry),len(prefix))   
             if entry[0:minlen] != prefix[0:minlen]:    
                count = len(results)
                break              
             if entry[-1] == "*" and len(results) != count:                 
                results.append(entry[0:-1])
    
    return jsonify(results)

目前,@app.route('/add') 的值和@app.route('/autocomplete') 的前缀是通过 URL 本身获取的。 但是,我希望通过输入文本框获取 @app.route('/autocomplete') 的 prefixes/text 以创建动态自动完成。

如果有人能指导我实现同样的方法,我将不胜感激。

这是一个示例输出: autocomplete

我也提到了 https://redis.com/ebook/part-2-core-concepts/chapter-6-application-components-in-redis/6-1-autocomplete/ 但无法理解如何实施它

编辑:我在 https://github.com/RediSearch/redisearch-py/blob/master/redisearch/auto_complete.py

找到了解决方案

您可以使用 redisearch 的自动完成器。 Github https://github.com/Redislabs-Solution-Architects/redisearch_demo_and_preso

上提供了使用烧瓶的示例