在Google App Engine中创建表单自动完成功能
我想在App Engine上为标签字段做一个自动补全的功能,就像在Stack Overflow上那样……你能给我一些建议吗?
服务器端算法?——自动补全的逻辑应该是什么样的?
App Engine的实现?——这个功能的数据存储结构应该是什么样的?
3 个回答
我刚刚发布了一个关于如何在Google App Engine上实现自动补全的两部分系列文章:使用Python的服务器端服务和使用YUI3的自动补全插件的后续内容。
特别是,使用类似于Stack Overflow的标签自动补全功能,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中定义)会查找以输入字符串开头的标签列表。
你好。几天前我遇到了这个问题。其实数据存储的结构并不重要,只要你有一个想要搜索的字符串字段就可以了。因为App Engine目前还不支持全文搜索,所以你只能使用某种“以...开头”的搜索方式,这虽然不是百分之百准确,但对于查找标签来说还算可以。
在Google Code博客上有关于如何在GAE上实现基本搜索的讨论,这是为2010年Google I/O大会做的。虽然代码是用Java写的,但原理是一样的: http://googlecode.blogspot.com/2010/05/google-app-engine-basic-text-search.html
至于具体的逻辑,这完全取决于你自己。我见过一些系统在每次按键时都使用“以...开头”的查询,其他的则使用LIKE查询。但由于GAE的限制,LIKE查询是不能用的。更多讨论可以在这个帖子里找到: Google App Engine: 是否可以进行Gql LIKE查询?