google.appengine.ext.search パッケージ

概要

Python のみで実装された全文インデックス作成と検索。

db.Model の SearchableModel サブクラスを定義します。このサブクラスは、データストアの既存のインデックスに基づいて全文インデックス作成と検索をサポートします。

多くは期待しないようにします。まず、ランキングがありません。これは決定的な欠点です。 フレーズの完全一致、文字列の部分一致、ブール演算子、ステミング、またはその他の一般的な全文検索機能もありません。 最後に、ストップワード(インデックス作成されていない一般的な単語)のサポートは現在英語に限定されています。

インデックスを作成するには、エンティティを作成して SearchableModel インスタンスとして保存する必要があります。例:

class Article(search.SearchableModel):

text = db.TextProperty() …

article = Article(text=…) article.save()

全文インデックスを検索するには、SearchableModel.all() メソッドを使用して、db.Query をサブクラス化する SearchableModel.Query のインスタンスを取得します。他のフィルタやソート順に加えて、検索クエリを提供するには、search() メソッドを使用します。例:

query = article.all().search(‘a search query’).filter(…).order(…) クエリの結果用:

全文インデックスは、__searchable_text_index という名前のプロパティに格納されます。

複数のインデックスとインデックスに対するプロパティの指定

デフォルトでは、すべての文字列プロパティを持つ 1 つのインデックスが作成されます。複数のインデックスを定義し、それぞれにインデックスを付けるプロパティを指定するには、model.SearchableModel の SearchableProperties() メソッドをオーバーライドします。たとえば、次のようにします。

class Article(search.SearchableModel):

@classmethod def SearchableProperties(cls):

return [[‘book’, ‘author’], [‘book’]]

この例では、次の 2 つのインデックスが維持されます。1 つは 'book'と 'author' プロパティを含み、もう 1 つは 'book' プロパティのみを含みます。また、それぞれ__searchable_text_index_book_author と __searchable_text_index_book という名前のプロパティに格納されます。以下のように明示的に追加しない限り、すべてのプロパティを含むインデックスは作成されません。

@classmethod def SearchableProperties(cls):

return [[‘book’, ‘author’], [‘book’], search.ALL_PROPERTIES]

SearchableProperties() のデフォルトの戻り値は [search.ALL_PROPERTIES] です(1 つのインデックス、すべてのプロパティ)。

カスタム定義のインデックスを使用して検索するには、以下のように 'search' の 'properties' パラメータでその定義を渡します。

Article.all().search(‘Lem’, properties=[‘book’, ‘author’])

リスト内のプロパティの順序が重要であるので注意してください。

index.yaml へのインデックスの追加

一般に、全文検索を提供するだけの場合は、index.yaml に余分なインデックスを追加する必要はありません。ただし、祖先、フィルタ、またはソート順に加えてクエリで search() を使用する場合は、__searchable_text_index プロパティを使用して index.yaml にインデックスを作成する必要があります。例: .. rubric:: example

  • kind: Article properties: - name: __searchable_text_index - name: date

    direction: desc

同様に、カスタム インデックスを作成した場合(上記を参照)、__searchable_text_index_book_author のように、保存されているプロパティの名前を使用します。

SearchableModel を使用すると、インデックス作成可能ワードごとにインデックス行が書き込まれるため、save() オペレーションのレイテンシが大幅に増加することに注意してください。これは、save() のレイテンシが、特定のエンティティのプロパティのサイズにほぼ比例して増加することも意味します。ハッカーにはご注意ください。

class google.appengine.ext.search.SearchableEntity(kind_or_entity, word_delimiter_regex=None, *args, **kwargs)ソース

ベース: google.appengine.api.datastore.Entity

全文インデックス作成をサポートする datastore.Entity のサブクラス。

データストアの組み込みのプロパティ別インデックスを使用して、すべての文字列とテキストのプロパティのインデックスを自動的に作成します。検索するには、SearchableQuery クラスとその Search() メソッドを使用します。

classmethod IndexPropertyName(properties)ソース

指定されたインデックス定義、これを配置するプロパティの名前を返します。

class google.appengine.ext.search.SearchableModel(parent=None, key_name=None, _app=None, _from_entity=False, **kwds)ソース

ベース: google.appengine.ext.db.Model

全文検索とインデックス作成をサポートする db.Model のサブクラス。

すべての文字列ベースのプロパティにインデックスを自動的に作成します。検索するには、all() メソッドを使用して SearchableModel.Query を取得し、その search() メソッドを使用します。

SearchableProperties() をオーバーライドして、インデックスや複数のインデックスのプロパティを定義します(ファイルのコメントを参照)。

class Query(model_class=None, keys_only=False, cursor=None, namespace=None, _app=None, distinct=False, projection=None)ソース

ベース: google.appengine.ext.db.Query

全文検索をサポートする db.Query のサブクラス。

search(search_query, properties=[])ソース

このクエリに全文検索を追加します。

パラメータ

全文検索クエリを含む文字列。(search_query,) -

戻り値

self

classmethod SearchableProperties()ソース
classmethod all()ソース

この種類の SearchableModel.Query を返します。

classmethod from_entity(entity)ソース

db.Model.from_entity() をラップし、SearchableEntity を挿入します。

class google.appengine.ext.search.SearchableMultiQuery(bound_queries, orderings)ソース

ベース: google.appengine.api.datastore.MultiQuery

サブクエリを検索して Search() をサポートするマルチクエリ。

Search(*args, **kwargs)ソース

検索クエリを追加します。この場合、検索クエリをすべてのサブクエリに追加します。

パラメータ
  • args- 各サブクエリで Search に渡されます。

  • kwargs - 各サブクエリで Search に渡されます。

戻り値

SearchableQuery との一貫性のために self

class google.appengine.ext.search.SearchableQuery(kind=None, filters={}, _app=None, keys_only=False, compile=True, cursor=None, namespace=None, end_cursor=None, projection=None, distinct=None, _namespace=None)ソース

ベース: google.appengine.api.datastore.Query

全文検索をサポートする datastore.Query のサブクラス。

SearchableEntity クラスまたは SearchableModel クラスを使用して作成および格納されたエンティティのみを検索します。

GetFilterPredicate(*args, **kwds)ソース

検索クエリのフィルタを追加して、スーパークラスに委任します。

Query.GetFilterPredicate() の署名をシミュレートします。インデックス プロパティのフィルタがすでに存在する場合、BadFilterError を発生させます。

戻り値

datastore_query.FilterPredicate

Search(search_query, word_delimiter_regex=None, properties=[])ソース

検索クエリを追加します。これはフィルタと組み合わせることができます

検索クエリのキーワードは、ストップワードであったり、短すぎたりして、インデックスが作成されないような場合は、暗黙的に削除されます。

パラメータ

search_query – string

戻り値

# このクエリ SearchableQuery