2011-04-13 48 views
1

在谷歌App Engine的應用程序的附加指數(GAE/JAVA)我有這樣一個類:查詢,而不在GAE

public class Person{ 
    private int born; 
    private String sex; 
    private List<String> likes; 
    //some other fields 
    ... 
} 

我需要的是應用程序的用戶可以在不同的字段進行搜索。例如,用戶可以要求搜索:

  1. 所有誰是1975年後如土豆和魚
  2. 所有誰是1980年以前出生的婦女如胡蘿蔔出生的人

我的意思,查詢可能具有可變數量的過濾器。 查詢不需要額外的索引是非常重要的,所以我已經閱讀了文檔,它說只使用相等的查詢不需要額外的索引。

所以我想到了用IN操作符(因爲它是coverted到等於運營商)這樣的:

select from Person where 
likes IN ("potatoes", "fish") AND 
born IN (1975,1976....2011) 

select from Person where 
sex = 'female' AND 
likes = "carrots" AND 
born IN (1900,1901....1980) 

的問題是,因爲它是在文檔中指出:

的IN運算符還會執行多個查詢,其中一個用於所提供的列表值中的每個項目,其中所有其他過濾器都是相同的,並且IN過濾器被替換爲等於過濾器。結果按照列表中項目的順序合併。如果一個查詢具有多個IN過濾器,則該查詢將作爲多個查詢來執行,其中一個用於IN過濾器中的每個值組合。

包含NOT_EQUAL或IN運算符的單個查詢限於30個子查詢。

用戶將不是用戶衆多領域,在同一個查詢典型的是在3(雖然有許多領域可以使用),但我需要在任何年齡範圍內的搜索用戶。所以這種方法將以30個子查詢的限制結束。

我該如何設計解決方案來解決這個問題?

感謝

+0

爲什麼如此重要的是您不使用自定義索引? – 2011-04-14 00:35:18

+0

@Nick Johnson用戶可以爲查詢選擇許多字段,以便創建大量的索引。我只是想避免它。 – Javi 2011-04-14 07:55:15

回答

2

這不是你想聽到的,但不幸的是,App Engine數據存儲目前是不適合你的應用的理想選擇。它並不支持數據挖掘或不重要的用戶生成的查詢,這是你在這裏要做的。

將在未來發生改變,由於全文搜索(在roadmap),託管SQL數據庫(in App Engine for Business)和查詢引擎的改進described by Alfred Fuller。如果你不能等待這些,那麼你需要去其他地方看看。