Index クラス

Index クラスは、ドキュメントのインデックス登録、削除、検索を可能にするためのインデックスを表します。

Index は、google.appengine.api.search モジュールで定義されます。

はじめに

Index クラスは、インデックスを作成するための引数のほか、インデックス内のドキュメント(またはドキュメントの反復可能なコレクション)を追加、リスト表示、検索、削除できるようにする関数を提供します。インデックスの名前や名前空間など、Index クラスに対する引数を使用してインデックスを作成します。

次のコードは、ドキュメントをインデックスに追加してから、クエリに一致するドキュメントを検索する方法を示しています。

# Get the index.
index = search.Index(name='index-name')

# Create a document.
doc = search.Document(
    doc_id='document-id',
    fields=[search.TextField(name='subject', value='my first email'),
            search.HtmlField(name='body', value='<html>some content here</html>')])

# Index the document.
try:
    index.put(doc)
except search.PutError, e:
    result = e.results[0]
    if result.code == search.OperationResult.TRANSIENT_ERROR:
        # possibly retry indexing result.object_id
except search.Error, e:
    # possibly log the failure

# Query the index.
try:
    results = index.search('subject:first body:here')

    # Iterate through the search results.
    for scored_document in results:
        # process the scored_document

except search.Error, e:
    # possibly log the failure

コンストラクタ

Index クラスのコンストラクタは、次のように定義されます。

Index(name, namespace=None)

クラス Index のインスタンスを作成します。

引数

name

インデックス名(詳しくは、下記の name プロパティをご覧ください)。

namespace

マルチテナント アプリケーションの場合、インデックス名が定義される名前空間。

結果値

Index クラスの新しいインスタンス。

プロパティ

Index クラスのインスタンスには次のプロパティがあります。

schema

サポートされるタイプのリストにフィールド名をマッピングするスキーマ。search.get_indexes メソッドから返されるインデックスにのみ有効です。

name

インデックス名。人間が読み取れる形式の ASCII 文字列で、インデックスを識別します。空白文字を含めることはできません。また、先頭に感嘆符(!)は使用できません。

namespace

インデックス名が定義される名前空間。

storage_usage

このインデックスで使用されるバイトの概数。この数は、最近の変更結果を反映しない場合があります。search.get_indexes メソッドから返されるインデックスにのみ有効です。

storage_limit

このインデックスのバイト単位の最大許容保存容量。search.get_indexes メソッドから返されるインデックスにのみ有効です。

インスタンス メソッド

Index クラスのインスタンスには次のメソッドがあります。

put(self, documents, deadline=None)

指定したドキュメントがすでにインデックスに追加されていて、各ドキュメントの doc_ids が同一である場合、それらのドキュメントは更新したコンテンツでインデックスに再登録されます。

引数

documents

インデックスに登録するドキュメント(またはドキュメントの反復可能なコレクション)。

deadline

秒単位の RPC コールの期限。

結果値

結果(PutResult)のリスト。結果は、インデックス登録が要求されたドキュメントごとに 1 つです。

例外

PutError

1 つまたは複数のドキュメントのインデックス登録に失敗したか、インデックス登録数が要求数に一致しませんでした。

TypeError

不明な属性が渡されました。

ValueError

引数がドキュメントまたはドキュメントの反復可能なコレクションではないか、ドキュメントの数が MAXIMUM_DOCUMENTS_PER_PUT_REQUEST を超えています。

delete(self, document_ids, deadline=None)

ドキュメントをインデックスから削除します。

リスト内の ID についてドキュメントが存在しない場合、その ID は無視されます。

引数

document_ids

削除するドキュメントの ID(または ID のリスト)。

deadline

秒単位の RPC コールの期限。

例外

DeleteError

1 つまたは複数のドキュメントの削除に失敗したか、削除数が要求数に一致しませんでした。

ValueError

引数が有効なドキュメント ID の文字列または反復可能なコレクションではないか、ドキュメント ID の数が MAXIMUM_DOCUMENTS_PER_PUT_REQUEST を超えています。

get(self,doc_id, deadline=None)

ドキュメントの ID を使用してインデックスからドキュメントを取得します。ドキュメントが見つからない場合、None を返します。

引数

doc_id

取得するドキュメントの ID。

deadline

秒単位の RPC コールの期限。

結果値

ID が doc_id により指定されるものと一致する Document オブジェクト。

インデックス内でクエリに一致するドキュメントを検索します。クエリは、文字列または Query オブジェクトのいずれかです。

たとえば次のコードでは、タイトルに「first」、いずれかの部分に「good」を含むドキュメントの検索を要求しています。この例の場合、最大で 20 のドキュメントが返され、「カーソル トークン」から検索を開始し、その応答について別のカーソルが 1 つ返され、タイトルで降順に並べ替えて、作成者、タイトル、概要の各フィールドの他にスニペット フィールドのコンテンツが返されます。

results = index.search(
          # Define the query by using a Query object.
          query=Query('subject:first good',
              options=QueryOptions(limit=20,
                  cursor=Cursor(),
                  sort_options=SortOptions(
                      expressions=[SortExpression(expression='subject',
                                                  default_value='')],
                      limit=1000),
                  returned_fields=['author', 'subject', 'summary'],
                  snippeted_fields=['content'])))

次のコードは、結果のカーソルの使用方法を示します。

cursor = results.cursor
for result in results:
     # process result
results = index.search(Query('subject:first good',
                       options=QueryOptions(cursor=cursor))
                      )

次のコードは、per_result カーソルの使用方法を示します。

results = index.search(query=Query('subject:first good',
                       options=QueryOptions(limit=20,
                       cursor=Cursor(per_result=True),
                       ...))
                       )

cursor = None
for result in results:
    cursor = result.cursor

results = index.search(
          Query('subject:first good', options=QueryOptions(cursor=cursor))
               )

引数

query

インデックス内のドキュメントと照合するクエリ。Query オブジェクトに記述します。詳しくは、クエリ言語の概要をご覧ください。

deadline

秒単位の RPC コールの期限。

結果値

クエリにより一致したドキュメントの数、返された数、一致したドキュメントのリストを含む SearchResults オブジェクト。

例外

TypeError

パラメータの型が無効であるか、不明な属性が渡されました。

ValueError

パラメータの値が無効です。

get_range(self, start_id=None, include_start_object=True, limit=100, ids_only=False, deadline=None)

一連のドキュメントをインデックスから doc_id の順に取得します。

引数

start_id

ドキュメントをリスト表示する際に先頭になるドキュメント ID を含む文字列。デフォルトでは、1 つ目のドキュメント ID から開始します。

include_start_object

true の場合、start_id で指定されたドキュメントを含みます。

limit

返されるドキュメントの最大数。

ids_only

true の場合、ドキュメント全体ではなくドキュメント ID のみを返します。

deadline

秒単位の RPC コールの期限。

結果値

取得済みドキュメントがドキュメント ID 順で並べられたリストを含む A GetResponse オブジェクト。

例外

TypeError

不明な属性が渡されました。

Error

リクエストの処理中に Error のサブクラスが発生しました。