Informationen über Suchindexe abrufen

Amy Unruh, Okt. 2012
Google Developer Relations

Einführung

Nachdem Sie einige Dokumente erstellt und einigen Indexen hinzugefügt haben, ist es häufig nützlich, sich mit der Struktur und den Inhalten der Indexe vertraut zu machen. In dieser Lektion erfahren Sie, wie das geht.

Ziele

Sie erfahren mehr über die Indexe der Search API.

Vorbereitung

Indexschemas

Jeder Index ist mit einem Schema verknüpft, das zum Interpretieren von Abfragen für diesen Index verwendet wird. Das Schema wird dynamisch aus den Feldnamen und -typen erstellt, die in allen Dokumenten des Index enthalten sind. Durch das Hinzufügen von Dokumenten zu einem Index kann es daher zu Änderungen des Indexschemas kommen.

Es kann nützlich sein, einen Blick auf das Indexschema zu werfen, da Sie so die Struktur der Daten in diesem Index sehen können. Ein einfaches Schema für einen Index könnte zum Beispiel so aussehen:

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

Hier sehen Sie, dass die Dokumente im Index die vier Felder comment, date, author und count mit den angegebenen Feldtypen verwenden. Bei einem einzelnen Dokument wäre es nicht erforderlich gewesen, alle Felder zu verwenden. Das Schema hat die Form eines Wörterbuchs, in dem jeder Schlüssel der Name eines Dokumentfelds ist, das dem Index hinzugefügt wurde. Bei dem entsprechenden Wert handelt es sich um eine Liste der Feldtypen, die mit diesem Feldnamen verwendet werden. Wenn Sie denselben Feldnamen mit unterschiedlichen Feldtypen verwenden, zum Beispiel in mehreren Dokumenten, listet das Schema mehr als einen Feldtyp für diesen Feldnamen auf. Beispiel:

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

Ein komplexeres Beispiel ist das Schema für den Produktdokument-Index in der Beispielanwendung, nachdem die Beispieldaten hinzugefügt wurden. Diese Ausgabe zeigt die Standardfeldnamen, nicht die Klassenvariablen, die wir in unseren Codebeispielen verwendet haben.

{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']}

In der Beispielanwendung wird dieser Index standardmäßig als productsearch1 bezeichnet. Das Schema spiegelt beide Kategorien von Produktdokumenten wider, die von der Anwendung verwendet werden (books und hd_televisions). Es werden nicht nur die Hauptproduktfelder beider Kategorien angezeigt, sondern auch die spezifischen Felder für die eine oder andere Kategorie, zum Beispiel author (nur von books verwendet), tv_type (nur von hd_televisions verwendet) usw.

Indexe und Dokumente aufrufen

Verwenden Sie den Abschnitt Cloud Datastore der GCP Console, um Informationen zu den Indexen Ihrer Anwendung und den darin enthaltenen Dokumenten aufzurufen.

Programmatisch auf Indexschemas zugreifen

Sie können auch programmatisch auf alle Indexe Ihrer Anwendung und die zugehörigen Schemas zugreifen:

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)

Die aufgelisteten Schemainformationen sehen wie die Wörterbücher oben aus.

Sie können einen Index vollständig löschen, indem Sie alle Dokumente im Index und anschließend das Indexschema löschen.

Zusammenfassung

In dieser Lektion haben wir uns angesehen, wie Sie Informationen zu den Indexen einer Anwendung und den zugehörigen Schemas erhalten.

Sie können es selbst mit der Beispielanwendung ausprobieren: Sehen Sie sich die Indexe der Anwendung in der GCP Console an und fügen Sie der Methode get() der Klasse IndexHandler in handlers.py dann den Code des vorherigen Abschnitts hinzu, in dem Ihre Indexe und Schemas aufgelistet werden:

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)

Sie sollten diesen Code nur vorübergehend hinzufügen, da ansonsten zusätzliche Kosten für die Anfrage entstehen. Wenn Sie die Anwendung neu bereitstellen und beim Laden der Indexseite einen Blick auf ihre Logs werfen, sehen Sie eine Liste Ihrer Indexe und Schemas.

Nachdem wir nun die Grundlagen der Indexierung und Abfrage von Inhalten durchgearbeitet haben, verfügen Sie bereits über die Tools zum Hinzufügen von Volltextsuche zu Ihren App Engine-Anwendungen. Die Search API unterstützt jedoch wesentlich komplexere Abfragen als diejenigen, die wir bereits gezeigt haben. Im nächsten Kurs Ausführliche Informationen zur Python Search API werden wir uns eingehend mit der Erstellung von Suchabfragen befassen und sehen außerdem, wie die zurückgegebenen Ergebnisse gesteuert und sortiert werden.