GAE 简单搜索 + 自动补全
我想为我的小游戏网站创建一个搜索功能。
这个网站有个问题,就是很难找到你想要的具体游戏,用户必须去按字母顺序的列表里找。
这个网站是用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)