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オフセット。
これはひどく非効率的(かつ高価な)感じ
これを試してみる必要があります。リストプロパティを作成します。リスト givenNameとfamilyNameの大文字の値を格納する名前を格納します。リストの任意の値で "startsWith"を検索する場合、クエリはどのようになりますか?どうも !! –
koma
@koma Correct。クエリは、指定された名前の既存の範囲クエリと同じに見えます。 –
は魅力的です:-) – koma