0
我有一個持有givenName和familyName屬性的數據存儲中的聯繫人列表。 我可以搜索'givenName'以給定查詢參數開頭的聯繫人列表。我不喜歡這樣與Objectify4:通過多個屬性上的不等式查詢尋呼
Query<Contact> query = txn().consistency(Consistency.STRONG).load().type(Contact.class).ancestor(ancestor);
if (criteria.getSearchString() != null) {
query = query.filter(SEARCH_GIVEN_NAME + " >= ", criteria.getSearchString().toUpperCase());
query = query.filter(SEARCH_GIVEN_NAME + " <= ", criteria.getSearchString().toUpperCase() + SENTINEL);
}
query = query.limit(criteria.getPageSize()).offset(criteria.getStartIndex());
但良好的用戶體驗,需要對「給定名稱」或「familyName」接觸開始,在搜索框中輸入的文本同時搜索。
我不能在一個數據存儲查詢(我認爲)中組合這個搜索。所以我將不得不執行兩個具有偏移和限制的查詢。
我唯一的到目前爲止的想法:
假設的結果150-200搜索項= 'AB%' 的要求。
以限制200開始以'ab'開頭的givenName的查詢;
查詢以'ab'開頭的familyName,限制爲200;
結合在一個排序結果列表
兩個結果中的偏移量的綜合結果發現150-200。
爲同一搜索項的後續請求,但偏移200-250需要重複上都查詢整個搜索但限250。
這種感覺非常低效的(且昂貴)
好的,我必須嘗試這個......所以我創建一個列表屬性列表名稱,我填充givenName和familyName的大寫值,每次我存儲/更新聯繫人。如果我想在列表的任何值中搜索「startsWith」,查詢將會是什麼樣子?謝謝 !! –
koma
2012-03-29 13:17:28
@koma正確。該查詢看起來與給定名稱上的現有範圍查詢相同。 – 2012-03-29 14:03:27
就像一個魅力:-) – koma 2012-03-29 14:48:22