在Google App Engine中创建表单自动完成

时间:2010-11-22 08:27:12

标签: python ajax google-app-engine autocomplete

我想为标签字段构建一个自动完成功能,就像App Engine上的SO一样......任何想法我应该如何处理这个过程?

服务器端算法? - 自动完成应该有什么逻辑?

App Engine实施? - 数据存储架构应该是什么?

3 个答案:

答案 0 :(得分:8)

嘿。我几天前就遇到过这个问题。只要您有一个您想要搜索的StringProperty字段,数据存储架构就不重要了。由于App Engine还不支持全文搜索,因此您必须使用某种“开始时”搜索,这不是100%,但可以查找标记。

有关如何在Google代码博客上实施GAE基本搜索的讨论,该博客是针对Google I / O 2010完成的。代码是用Java编写的,但原则是相同的:http://googlecode.blogspot.com/2010/05/google-app-engine-basic-text-search.html

至于逻辑,这完全取决于你。我看到在每个按键上都使用“开头”查询的系统,其他人使用LIKE查询。但是GAE的限制不允许LIKE查询。本主题中的更多讨论:Google App Engine: Is it possible to do a Gql LIKE query?

答案 1 :(得分:6)

您的问题更多是关于javascript(客户端)而不是GAE(服务器端)。

你应该从jQuery AutoComplete开始。如果标签的数量很小,您可以将数据嵌入到html中,否则使用AJAX调用查看示例。

如果你去AJAX那么你需要服务器端的东西 - 你所要做的就是建立一些接受查询并返回JSON格式化数据的URL。我喜欢在GAE上使用Django,它有很好的serializers

答案 2 :(得分:1)

刚刚发布了关于使用GAE实施自动填充的2部分系列:server-side service with Pythoncontinuation using YUI3 AutoComplete plugin

特别是,对类似于SO YUI3 AutoComplete插件的标签使用自动完成功能提供了选项queryDelimiter,它允许您在选择要匹配的字符串之前定义分隔符。因此,如果将其设置为space,则插件会匹配文本框中键入的每个新单词:

YUI().use('autocomplete', function (Y) {

      Y.one('body').addClass('yui3-skin-sam');

      // AutoComplete on search input field
      Y.one('#search_field').plug(Y.Plugin.AutoComplete, {
        queryDelimiter: ' ',
        source: '/rpc.xhr?action=ac_keywords&arg0={query}'
      }); 
});

操作ac_keywords(在GAE中定义)查找以typed string开头的列表标记。