2010-11-22 50 views
6

我想为标记字段构建一个自动完成功能,就像在App Engine上的SO一样...任何想法我应该如何去做这个过程?在Google App Engine中创建表单自动完成

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

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

回答

6

你的问题是关于JavaScript(客户端)比GAE(服务器端)更多。

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

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

+0

嗨Paulo,我问了一个类似的问题给我的代码的上下文。如果你可以看看,我会非常感激:http://stackoverflow.com/questions/25979567/jquery-autocomplete-with-remote-json-source-google-app-engine-python – puoyaahhh 2014-10-04 19:00:36

8

嘿。几天前我回过来问这个问题。只要你有一个你想要搜索的StringProperty字段,数据存储模式并不重要。由于App Engine目前还不支持全文搜索,因此您必须使用某种“开始于”搜索功能,这不是100%,而是查找标签非常合适。

有这是2010年的代码是用Java编写的,但原理是一样的谷歌I/O完成就如何落实在谷歌代码博客上GAE基本搜索的讨论: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

刚刚发布了2部分系列文章,介绍如何使用GAE实现自动完成:server-side service with Pythoncontinuation using YUI3 AutoComplete plugin

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

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中定义)查找与类型化的字符串开头列表标签。