検索インデックスに関する情報の取得

2012 年 10 月、Amy Unruh
Google Developer Relations

はじめに

ドキュメントをいくつか作成してインデックスに追加したら、インデックスの構造と内容について確認しておくのがよいでしょう。このレッスンでは、その方法について説明します。

目標

Search API のインデックスについて学習します。

要件

インデックス スキーマ

それぞれのインデックスには、インデックスのクエリの解釈に使用される関連スキーマがあります。スキーマは、インデックス内のすべてのドキュメントに存在するフィールド名とタイプから動的に作成されます。インデックスにドキュメントを追加すると、インデックスのスキーマも更新されます。

インデックスのスキーマが閲覧できると、インデックス内のデータ構造が確認できて便利です。シンプルなインデックスのスキーマは、次のようになります。

{'comment': ['TEXT'], 'date': ['DATE'], 'author': ['TEXT'], 'count': ['NUMBER']}

インデックス内のドキュメントに、commentdateauthorcount の 4 つのフィールドがあり、それぞれにフィールド タイプが指定されているのがわかります(個別の特定の文書でこれらのフィールドをすべて使用する必要はありません)。スキーマは辞書の形式をとっています。インデックスに追加されたドキュメントのフィールド名がキーになり、フィールド名とともに使用されるフィールド タイプの一覧が対応する値になります。異なるフィールド タイプ(異なるドキュメントなど)で同じフィールド名を使用すると、スキーマはそのフィールド名に対して複数のフィールド タイプをリストします。

{'field1': ['TEXT', 'NUMBER']}

さらに複雑な例として、サンプルデータが追加された後のサンプル アプリケーションの製品ドキュメント インデックスのスキーマを示します(この出力は、コード例で使用していたクラス変数ではなく、フィールド名をそのまま示しています)。

{u'category': ['ATOM'], u'publisher': ['TEXT'], u'isbn': ['TEXT'],
 u'description': ['TEXT'], u'name': ['TEXT'], u'author': ['TEXT'],
 u'price': ['NUMBER'], u'title': ['TEXT'], u'pid': ['TEXT'], u'modified': ['DATE'],
 u'tv_type': ['TEXT'], u'ar': ['NUMBER'],
 u'brand': ['TEXT'], u'pages': ['NUMBER'], u'size': ['NUMBER']}

サンプル アプリケーションでは、このインデックスはデフォルトで productsearch1 になっています。スキーマには、books および hd_televisions アプリケーションで使用される製品ドキュメントの両方のカテゴリが反映されています。両カテゴリで共有されるコアとなるフィールドだけでなく、一方のカテゴリに固有のフィールドも含まれています。たとえば、authorbooks のみで、tv_typehd_televisions のみで使用されています。

インデックスとドキュメントの表示

GCP Console の Cloud Datastore セクションを使用して、アプリケーションのインデックスと含まれるドキュメントに関する情報を表示します。

プログラムによるインデックス スキーマへのアクセス

アプリケーションのすべてのインデックスと付随するスキーマを、プログラムで取得することもできます。

from google.appengine.api import search
import logging

for index in search.get_indexes(fetch_schema=True):
    logging.info("index %s", index.name)
    logging.info("schema: %s", index.schema)

スキーマ情報の一覧は、上記の辞書のような形式になります。

完全にインデックスを削除するには、インデックス内のすべてのドキュメントを削除してからインデックス スキーマを削除します。

まとめと確認

このレッスンでは、アプリケーションのインデックスとそのスキーマに関する情報の取得方法について説明しました。

サンプル アプリケーションで実際に試してみてください。GCP Console でアプリケーションのインデックスについて確認し、前のセクションのコード(インデックスとスキーマを一覧表示するコード)を、handlers.pyIndexHandler クラスにある get() メソッドに追加してみてください。

class IndexHandler(BaseHandler):
  """Displays the 'home' page."""

  def get(self):
    cat_info = models.Category.getCategoryInfo()
    sort_info = docs.Product.getSortMenu()
    # add this code temporarily to look at your indexes
    for index in search.get_indexes(fetch_schema=True):
      logging.info("index %s", index.name)
      logging.info("schema: %s", index.schema)
    template_values = {
        'cat_info': cat_info,
        'sort_info': sort_info,
        }
    self.render_template('index.html', template_values)

このコードを追加することでリクエストのコストが高くなるため、追加は一時的なものとしてください。アプリケーションを再デプロイし、インデックス ページを読み込んでログを見ると、インデックスとスキーマが示されます。

ここまでで、コンテンツのインデックス作成とクエリの基礎について学びました。これで、App Engine アプリケーションに全文検索を追加するツールを入手したことになります。ただ、Search API では、これまでに示したものよりもはるかに洗練されたクエリがサポートされています。この後に続く Python Search API の詳細では、検索クエリの構造について詳しく確認し、検索結果の制御と並べ替えについて学習します。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Python 2 の App Engine スタンダード環境