我有一個Google App Engine應用程序與一個特定的模型,我們稱之爲遊戲。 它是指足球比賽,其日期,推薦人(參考),2個俱樂部(參考),得分,階段(參考),比賽(參考)和季節(參考)列表。換句話說,它有幾個領域,我打算通過高級搜索頁面進行搜索。例如,如果有人想按季節(比如說2008/2009)和日期(比如2009年1月1日之後)搜索所有遊戲,我應該解析GET變量,並且提出類似如下內容:Google App Engine綜合索引重新使用
games = Game.all()
// parse GET variables.
if (variables.hasFilter("season")
games.filter("game_season = ", season)
if (variables.hasFilter("after_date")
games.filter("game_date > ", after_date)
它需要一個特定的複合索引:
- kind: Game
properties:
- name: game_season
- name: game_date
現在,如果有人想對季節和俱樂部的搜索,這將是與上面相同,不同的是它需要另一個綜合指數:
- kind: Game
properties:
- name: game_season
- name: game_club
現在,如果有人想搜索的季節,日期和俱樂部,它需要甚至是另一個綜合指數:
- kind: Game
properties:
- name: game_season
- name: game_date
- name: game_club
我的問題是:如果我有第三索引準備和提供查詢服務,我可以刪除兩個第一索引,因爲它可以用於提供上述三個高級搜索,或者Google App Engine會生成NeedIndexError,因爲它不知道如何重用第三個索引來爲前兩個高級搜索提供服務?
問題是我想創建一個高級搜索的幾個領域(說6 - 日期,賽季,比賽,俱樂部,階段,比分)。這需要將索引與兩個實體組合,包含3個實體的索引組合等,直到組合所有實體的最終索引。
問題:
GAE真的可以重新使用複合索引,以便通過生成,比如說,6個實體一個綜合指數,我沒有生成指數的簡單版本5, 4,3和2個實體?
如果不是,有沒有更好的方法來解決這個問題?有一件事我打算做的是插入「空白」的過濾器,例如在一定的季節內遊戲搜索和俱樂部:
遊戲= Game.all()
//解析GET變量。 如果(variables.hasFilter( 「季節」)
games.filter( 「game_season =」,季節) 其他 games.filter( 「game_season =」 *)如果(variables.hasFilter( 「日期」 )
games.filter( 「GAME_DATE =」,日期) 其他 games.filter( 「GAME_DATE =」 *)如果(variables.hasFilter( 「俱樂部」)
games.filter(「game_club = 「,俱樂部) 其他 比賽。過濾器(「game_club =」 *)
,因爲我認爲這是醜陋的我還沒有實現這個解決辦法,這意味着,它不是解決這個問題的最好辦法。 (另外,我仍然不知道如何實現通配符)。
感謝您對此問題的任何意見。
這說明了這個問題,但只是說這裏沒有優雅的解決方案。看起來我必須限制允許的高級搜索,爲固定複合索引設置預定義的過濾器組合。 – NunoCardoso 2011-03-01 08:51:00