「サンプル」を収集し、サンプルのクエリと分析のためのサービスを提供するアプリ エンジンのシステムを作成しています。サンプルのデータ モデルは次のようになります。
class Sample(ndb.Model):
category = ndb.StringProperty()
name = ndb.StringProperty()
data = ndb.JsonProperty()
timestamp = ndb.DateTimeProperty()
tags = ndb.StringProperty(repeated = True)
ご覧のとおり、サンプルごとに一連の文字列タグがあります。たとえば、次のようなものです。
['CustomerA', '2.0.5', 'featureX', 'logTypeB', ...]
基本プロパティのフィルターに基づいて、システム内のすべてのサンプルに対してクエリを実行し、必要な一連のタグを含むハンドラーがあります。注: 結果セットは非常に大きくなる可能性があるため、クエリはページング/制限をサポートしているため、一度に少しずつデータを返します。それはすべてうまくいきます。
この上にユーザー インターフェイスを配置するときに、追加のタグを入力して結果をさらにフィルター処理するためのオートコンプリート フィールドをユーザーに提示する方法が必要です。たとえば、次のタグが付いたサンプルに制限されている場合:
Sample(..., tags=['CustomerA', '2.0.5', 'featureX'])
Sample(..., tags=['CustomerA', '2.0.5', 'featureY'])
Sample(..., tags=['CustomerB', '2.0.5', 'featureX'])
Sample(..., tags=['CustomerB', '2.0.5', 'featureX'])
Sample(..., tags=['CustomerB', '2.0.5', 'featureY'])
次に、以下を含むオートコンプリートを表示したいと思います。
['CustomerA', 'CustomerB', '2.0.5', 'featureX', 'featureY']
つまり、現在の結果セットに存在するタグの一意のリストを返すことができるハンドラーが必要です。問題は、すべての結果サンプル (潜在的に非常に大きい) を反復処理し、返される一意のタグのセットを構築することなしに、App Engine でこれを行う方法がとにかく見つからないことです。
システム内のすべてのタグに対して個別のエンティティ セットを保持できますが、これでも問題は解決しません。システム内のすべてのサンプルに存在するすべてのタグをすばやく見つけることができますが、現在のフィルターを通過するサンプルのセットに限定することはできません。
これを合理的な方法で実装するために何ができるかについてのアイデアはありますか?