GAE 简单搜索 + 自动补全

1 投票
2 回答
1098 浏览
提问于 2025-04-15 18:06

我想为我的小游戏网站创建一个搜索功能。

这个网站有个问题,就是很难找到你想要的具体游戏,用户必须去按字母顺序的列表里找。

这个网站是用Python在Google App Engine上运行的,使用的是webapp框架。

至少我需要一个简单的方法来根据游戏名称进行搜索。看起来用JavaScript来搜索可能会更简单。我希望能有一个自动补全的功能。我尝试过想办法实现这个功能,似乎唯一的方法就是创建一个庞大的索引,把每个名字拆分成不同的输入阶段(比如“ S”,“ Sh”,“ Sho” ... “购物车英雄”)。

有没有简单易行的方法来做到这一点?我开始觉得我可能需要在一个PHP+MySql的服务器上创建一个网络服务来进行搜索。

2 个回答

0

你有没有看过 gae-search?我觉得Django和jQuery的“自动完成”功能不在免费版里面(这个功能只在收费的高级版里),不过也许花点钱对你来说是值得的。

5

我写了下面的代码来处理这个问题。基本上,我把所有可能的单词“开头”保存到一个列表里,而不是保存整句话。这就是这个网站的jquery自动补全功能是怎么工作的。

import unicodedata
import re

splitter = re.compile(r'[\s|\-|\)|\(|/]+')

def remove_accents(text):
    nkfd_form = unicodedata.normalize('NFKD', unicode(text))
    return u"".join([c for c in nkfd_form if not unicodedata.combining(c)])

def get_words(text):    
    return [s.lower() for s in splitter.split(remove_accents(text)) if s!= '']

def get_unique_words(text):
    word_set = set(get_words(text))
    return word_set

def get_starts(text):
    word_set = get_unique_words(text)
    starts = set()
    for word in word_set:
        for i in range(len(word)):
            starts.add(word[:i+1])
    return sorted(starts)

撰写回答