Klasse "Index"

Die Klasse Index ist ein Index, mit dem Dokumente indexiert, gelöscht und durchsucht werden können.

Index ist im Modul google.appengine.api.search definiert.

Einführung

Die Klasse Index bietet Argumente zum Erstellen eines Indexes sowie Funktionen, mit denen Sie Dokumente (oder eine iterierbare Sammlung von Dokumenten) innerhalb des Indexes einfügen, auflisten, durchsuchen und löschen können. Sie erstellen einen Index mithilfe von Argumenten für die Klasse Index, einschließlich des Namens und des Namespaces für den Index.

Der folgende Code zeigt, wie Sie Dokumente in einen Index einfügen und anschließend nach Dokumenten suchen, die einer Abfrage entsprechen:

# 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

Konstruktor

Der Konstruktor für die Klasse Index ist so definiert:

Index(name, namespace=None)

Konstruieren Sie eine Instanz der Klasse Index.

Argumente

Name

Indexname (für Details siehe Property "name" weiter unten).

Namespace

Für mehrinstanzenfähige Anwendungen der Namespace, in dem der Indexname definiert ist.

Ergebniswert

Eine neue Instanz der Klasse Index.

Properties

Eine Instanz der Klasse Index hat die folgenden Properties:

Schema

Schema, nach dem die Feldnamen der Liste der unterstützten Typen zugeordnet werden. Nur gültig für Indexe, die von der Methode search.get_indexes zurückgegeben werden.

Name

Der Indexname ist ein von Menschen lesbarer ASCII-String. Er darf keine Leerzeichen enthalten und nicht mit einem Ausrufezeichen (!) beginnen.

Namespace

Namespace, in dem der Indexname definiert ist.

storage_usage

Ungefähre Anzahl der von diesem Index verwendeten Byte. Die Zahl spiegelt möglicherweise nicht die Ergebnisse der letzten Änderungen wider. Nur gültig für Indexe, die von der Methode search.get_indexes zurückgegeben werden.

storage_limit

Maximal zulässiger Speicherplatz für diesen Index in Byte. Nur gültig für Indexe, die von der Methode search.get_indexes zurückgegeben werden.

Instanzmethoden

Instanzen der Klasse Index haben die folgenden Methoden:

put(self, documents, deadline=None)

Wenn die angegebenen Dokumente bereits in den Index aufgenommen wurden und dieselben doc_ids haben, werden sie mit aktualisierten Inhalten neu indexiert.

Argumente

documents

Dokument (oder iterierbare Sammlung von Dokumenten) zum Indexieren.

deadline

Zeitlimit für RPC-Aufruf in Sekunden.

Ergebniswert

Ergebnisliste (PutResult), eine für jedes Dokument, das indexiert werden soll.

Ausnahmen

PutError

Ein oder mehrere Dokumente konnten nicht indexiert werden oder die Anzahl der indexierten Dokumente stimmte nicht mit der angeforderten überein.

TypeError

Unbekanntes Attribut übergeben.

ValueError

Das Argument entspricht nicht einem Dokument oder einer iterierbaren Sammlung von Dokumenten oder die Anzahl der Dokumente ist größer als MAXIMUM_DOCUMENTS_PER_PUT_REQUEST.

delete(self, document_ids, deadline=None)

Löscht Dokumente aus dem Index.

Wenn einer in der Liste angegebenen ID kein Dokument entspricht, wird diese ID ignoriert.

Argumente

document_ids

ID (oder Liste von IDs) von zu löschenden Dokumenten.

deadline

Zeitlimit für RPC-Aufruf in Sekunden.

Ausnahmen

DeleteError

Ein oder mehrere Dokumente konnten nicht gelöscht werden oder die Anzahl der gelöschten Dokumente stimmte nicht mit der angeforderten überein.

ValueError

Das Argument entspricht nicht einem String oder einer iterierbaren Sammlung von Dokument-IDs oder die Anzahl der Dokumente ist größer als MAXIMUM_DOCUMENTS_PER_PUT_REQUEST.

get(self,doc_id, deadline=None)

Ruft ein Dokument anhand seiner ID aus dem Index ab. Wenn das Dokument nicht gefunden wird, wird None zurückgegeben.

Argumente

doc_id

ID des Dokuments, das abgerufen werden soll.

deadline

Zeitlimit für RPC-Aufruf in Sekunden.

Ergebniswert

Document-Objekt, dessen ID mit der von doc_id definierten übereinstimmt.

Durchsucht den Index nach Dokumenten, die mit der Abfrage übereinstimmen. Die Abfrage kann entweder ein String oder ein Query-Objekt sein.

Zum Beispiel fordert das folgende Codefragment eine Suche nach Dokumenten an, bei denen im Thema das Element "first" und an einer beliebigen Stelle das Wort "good" vorkommt, wobei höchstens 20 Dokumente zurückgegeben werden sollen. Die Suche beginnt am Cursor-Token und es wird ein weiterer einzelner Cursor für die Antwort zurückgegeben. Die Sortierung erfolgt nach Thema in absteigender Reihenfolge. Es werden der Autor, das Thema, Zusammenfassungsfelder sowie ein Snippet vom Feldinhalt zurückgegeben:

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'])))

Das folgende Codefragment zeigt, wie ein Ergebniscursor verwendet wird.

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

Das folgende Codefragment zeigt, wie ein Cursor per_result verwendet wird:

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))
               )

Argumente

query

Abfrage zum Abgleich mit den Dokumenten im Index, beschrieben in einem Query-Objekt. Weitere Informationen finden Sie in der Übersicht über die Abfragesprache.

deadline

Zeitlimit für RPC-Aufruf in Sekunden.

Ergebniswert

SearchResults-Objekt mit einer Liste der übereinstimmenden Dokumente, der zurückgegebenen Anzahl und der mit der Abfrage übereinstimmenden Anzahl.

Ausnahmen

TypeError

Ein Parameter hat einen ungültigen Typ oder ein unbekanntes Attribut wurde übergeben.

ValueError

Ein Parameter hat einen ungültigen Wert.

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

Ruft eine Reihe von Dokumenten in der Reihenfolge doc_id aus einem Index ab.

Argumente

start_id

String mit der Dokument-ID, der die aufzulistenden Dokumente entsprechen sollen. Beginnt standardmäßig mit der ersten Dokument-ID.

include_start_object

Wenn true, wird auch das mit start_id definierte Dokument eingeschlossen.

Limit

Maximale Anzahl der zurückzugebenden Dokumente.

ids_only

Wenn true, werden anstelle von vollständigen Dokumenten nur Dokument-IDs zurückgegeben.

deadline

Zeitlimit für RPC-Aufruf in Sekunden.

Ergebniswert

Objekt A GetResponse, das eine Liste der abgerufenen Dokumente enthält, geordnet nach Dokument-IDs.

Ausnahmen

TypeError

Unbekanntes Attribut übergeben.

Error

Bei der Verarbeitung der Anfrage ist eine Unterklasse von Error aufgetreten.