2010-11-22 101 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中定義)查找與類型化的字符串開頭列表標籤。