在谷歌App Engine的應用程序的附加指數(GAE/JAVA)我有這樣一個類:查詢,而不在GAE
public class Person{
private int born;
private String sex;
private List<String> likes;
//some other fields
...
}
我需要的是應用程序的用戶可以在不同的字段進行搜索。例如,用戶可以要求搜索:
- 所有誰是1975年後如土豆和魚
- 所有誰是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個子查詢的限制結束。
我該如何設計解決方案來解決這個問題?
感謝
爲什麼如此重要的是您不使用自定義索引? – 2011-04-14 00:35:18
@Nick Johnson用戶可以爲查詢選擇許多字段,以便創建大量的索引。我只是想避免它。 – Javi 2011-04-14 07:55:15