代码之家  ›  专栏  ›  技术社区  ›  Joshua Patton

简单搜索+自动完成

  •  1
  • Joshua Patton  · 技术社区  · 15 年前

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

    这个网站的一个问题是很难找到你想要的特定游戏,因为用户必须到字母表中找到他们想要的。

    它使用用python编写的google app引擎运行,使用webapp框架。

    至少我需要一个简单的方法来搜索他们的名字。从JavaScript的外观来看,用它进行搜索可能更容易。我更喜欢自动完成功能。我试着弄清楚如何处理这个问题,似乎唯一的方法就是创建一个巨大的索引,每个名字被分为不同的输入阶段(“s”、“sh”、“sho”………)。购物车英雄”)。

    有没有简单而容易地做到这一点?我开始认为我必须在php+mysql服务器上创建一个Web服务并使用它进行搜索。

    2 回复  |  直到 14 年前
        1
  •  5
  •   Luke Francl    14 年前

    我已经编写了下面的代码来处理这个问题。基本上,我将所有可能的单词“starts”保存在列表中,而不是整个句子。这就是jquery自动完成的方式 this site 作品。

    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)
    
        2
  •  0
  •   Alex Martelli    15 年前

    你看过吗 gae-search ?我相信django+jquery的“自动完成”功能不是免费版本的一部分(它只是在付费高级版本中),但也许它对你来说值得一点钱。