0

多くの連絡先と関連付けられたタグを持つかなり単純なアプリケーション (CRM など) があります。

ユーザーは、次のような多くの基準 (検索項目) を指定して検索できます。

  • updated_time 過去 10 日間
  • xxx のタグ
  • xxx にないタグ
  • first_name は xxx で始まります
  • first_name が 'Smith' にありません

インデックス作成と、フィルター (not in) が複数のプロパティで機能しないことを理解しています。

私にとっては、ほとんどの場合、レポートは cron で行われるため、すべてのレコードを反復処理して処理することができます。ただし、それを行うための最適な最適化されたルートを知りたいです。

「すべて」をクエリする代わりに、appengine の設計制限で実行できるクエリに近づき、クエリ内の残りの項目を手動で照合できることを願っています。

それを行う 1 つの方法は、最初の検索項目から始めてカウントを取得し、次の検索項目を追加してカウントを取得することです。それが救済された時点で、残りの検索項目でそれらのレコードを手動で処理します。

質問は

  • カウントを行わずにクエリがプログラム的に有効かどうかを事前に知る方法はありますか
  • 衝突しないセット内の最高の検索項目をどのように決定しますか (not-in は多くのフィルターでは機能しないなど)。

私が見る唯一の方法は、すべての等しいフィルターを 1 つのクエリとして取得し、最初の等値フィルターを取得して実行し、検索エンティティを反復処理することです。

私を助けることができるライブラリはありますか;)

4

1 に答える 1

0

インデックス作成と、フィルター (not in) が複数のプロパティで機能しないことを理解しています。

これは厳密には正しくありません。複数のフィールドでフィルターを実行できる「複合インデックス」を作成できます。これらは追加のデータを消費します。

クエリに使用できる独自の「複合フィールド」を生成することにより、独自の複合インデックスを生成することもできます。

カウントを行わずにクエリがプログラム的に有効かどうかを事前に知る方法はありますか

あなたが言及している有効性の種類を理解しているかどうかはわかりません。

衝突しないセット内の最高の検索アイテムをどのように決定しますか (not-in は多くのフィルターでは機能しないなど)。

「入らない」フィルターは簡単ではありません。1 つの方法は、2 つの配列 (繰り返しフィールド) を作成することです。1 つはタグ付けされたすべてのエントリを含み、もう 1 つはすべてのタグが含まれていません。これにより、タグの有無にかかわらず、すべてのエンティティを簡単に見つけることができます。唯一の問題は、新しいタグを作成したら、すべてのエンティティに「not in」エントリを追加して、エンティティ全体をスイープする必要があることです。

于 2012-09-10T04:22:09.430 に答える