0

現在、Googleクラウドのデータストア、エンドポイント、およびNDBモデルを学習しています。私は今まで自分自身のために(初心者プログラマーの完全な)うまくいっていて、問題に遭遇しました。私は、検索に使用したいキーワードを含む文字列のプロパティを持っています。例。トースト、ベーグル、白、暗い。Googleのクラウドデータストアアイテムを含むリストを取得する

マイクエリーは現在、正確な文字列の一致を取得しますが、一部の文字列の一致も同様に行う必要があります。以下のコードは動作しますが、IN文はまだ完全一致を探しているようです。とにかく、データストアに、各単語を個別に読み取るプロパティの区切り文字を教えてください。または私は4つの異なるプロパティフィールドにそれを分割する必要がありますか?

if len(search) == 4: 
     for task in DirectionModel.query(DirectionModel.keywords == request.keywords, namespace='cookingDirections'): 
      tasks.append(Direction(name=task.name, direction=task.direction, description=task.description, 
            keywords=task.keywords)) 
    else: 
     for task in DirectionModel.query(DirectionModel.keywords.IN([search]), namespace='cookingDirections'): 
      tasks.append(Direction(name=task.name, direction=task.direction, description=task.description, 
            keywords=task.keywords)) 
    return DirectionList(items=tasks) 

モデル:

class DirectionModel(ndb.Model): 
name = ndb.StringProperty() 
direction = ndb.StringProperty(indexed=False) 
description = ndb.StringProperty() 
keywords = ndb.StringProperty() 
+0

を調査したほうが良いかもしれません。 – Jerec

+0

キーワードを格納するには、Arrayプロパティ(文字列の配列)を使用する必要があります。次に、いずれかのキーワードまたはキーワードの組み合わせを検索できます。 –

答えて

1

あなたはこのためにrepeated propertyを使用することができます。この

DirectionModel.query(DirectionModel.Keywords.IN(['toast', 'bagel', 'white', 'dark']) 

よう

class DirectionModel(ndb.Model): 

    ... 
    keywords = ndb.StringProperty(repeated=True) 

とクエリこれは、あなたが文字列のリストに対する文字列のリストに一致している前提としています。

は、クエリのこれらの種類はexploding indexesにつながる可能性があることに注意してください、あなたは複雑なキーワード検索を行うとしている場合は、モデルを追加する更新Search API

+0

ありがとう、私はそれを試してみましょう – Jerec

+0

作品!私はいくつかの型変換を行い、データストアのエントリを更新しなければなりませんでした。しかし私がトーストをしたら、それはまだトースト、パン、白、ミディアムを引く。しかし、私は自分の論理に取り組むだけの問題だと思っています! – Jerec

+0

'IN'演算子は、あなたが提供するリストに格納されているキーワードがあるかどうかを確認します。 –

関連する問題