3

2 つの異なるプロパティにフィルターを適用しようとしていますが、GAE ではこれを行うことが許可されていないため、解決策は次のとおりです。コード スニペットがあります。

if searchParentX :
    que.filter("parentX >=", searchParentX).filter("parentX <=", unicode(searchParentX) + u"\ufffd") 
    que.order('parentX')   

if searchParentY :
    que.filter("parentY >=", searchParentY).filter("parentY <=", unicode(searchParentY) + u"\ufffd") 
4

2 に答える 2

3

解決策は、メモリ内フィルタリングを実行することです。

  1. 2つのクエリを実行し(それぞれ1つのプロパティでフィルタリング)、結果を交差させることができます(データのサイズによっては、一方のクエリの結果を制限する必要がある場合がありますが、メモリに収まるようにもう一方のクエリの結果を制限する必要はありません)
  2. 1つのクエリを実行し、メモリ内の他のプロパティを除外します(この場合、どのプロパティがよりフィルタリングされたリストを返すかがわかっていると便利です)

または、データをセットに分割できるようにデータが構造化されている場合は、そのセットに対して等式フィルターを実行し、メモリでのフィルター処理を終了できます。たとえば、文字列を検索しているが、文字列が固定長(たとえば、6文字)であることがわかっている場合は、物乞いの3/4文字で「ルックアップ」フィールドを作成できます。次に、このフィールドを検索する必要がある場合は、最初の数文字を照合して検索し、メモリ内で検索を終了します。別の例:整数範囲を検索するときに、範囲の一般的なグループ化(たとえば、1年の数十年、または価格範囲)を定義できる場合は、「範囲」フィールドを定義して、同等の検索を実行し、メモリ内でフィルタリングを続行できます

于 2012-11-15T14:53:41.833 に答える
1

不等式フィルターは最大で 1 つのプロパティに制限されています。この制限は、bigtable のデータが字句ソートされた形式で格納されているため、一度に 1 つの検索しか実行できないためだと思います

https://developers.google.com/appengine/docs/python/datastore/queries#Restrictions_on_Queries

于 2012-11-15T05:20:13.163 に答える