2012-03-29 12 views
0

givenNameおよびfamilyNameプロパティを保持するデータストア内の連絡先のリストがあります。 'givenName'が指定されたクエリパラメータで始まる連絡先のリストを検索できます。複数のプロパティに対する不等式クエリによるページング

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()); 

しかし、優れたユーザーエクスペリエンスを検索ボックスに入力したテキストで始まる「givenName属性」OR「FamilyNameで」に関する連絡先の同時検索が必要です。私はObjectify4と、このようにそれを行います。

この検索を1つのデータストアクエリで組み合わせることはできません(私は思う)。だから、オフセットとリミットの両方で2つのクエリを実行する必要があります。

私の唯一のアイデア、これまで:

  • は、検索語= 'ABの%' の結果150〜200の要求をするとします。

  • 'ab'で始まるgivenNameを200で制限します。

  • 制限が200の「ab」で始まるfamilyNameのクエリ。

  • は150-200を見つけるために結合された結果にオフセット1つのソート結果リストの両方の結果

  • を結合します。

同じサーチ用語に対する後続の要求が、全体の検索を繰り返す必要がなく、両方のクエリに制限250となる200-250オフセット。

これはひどく非効率的(かつ高価な)感じ

答えて

3

簡単に解決策は、リストプロパティに指定された名前と姓の両方を入れて、その上の不平等の比較を実行することです。これにより、リストプロパティの項目が条件を満たしているエントリが返されます。

+0

これを試してみる必要があります。リストプロパティを作成します。リスト givenNameとfamilyNameの大文字の値を格納する名前を格納します。リストの任意の値で "startsWith"を検索する場合、クエリはどのようになりますか?どうも !! – koma

+0

@koma Correct。クエリは、指定された名前の既存の範囲クエリと同じに見えます。 –

+0

は魅力的です:-) – koma

関連する問題