IBM Cloud Docs
Mit IBM Cloudant Query arbeiten

Mit IBM Cloudant Query arbeiten

IBM® Cloudant® for IBM Cloud® Query ist eine deklarative JSON-Abfragesyntax für IBM Cloudant-Datenbanken. Sie können den Indextyp json oder text mit IBM Cloudantverwenden.

In den folgenden Fällen können Sie angeben, wie der Index erstellt wird, indem Sie ihm den Typ json zuordnen:

  • Sie wissen genau, welche Daten Sie suchen möchten.
  • Sie möchten Speicher- und Verarbeitungsanforderungen auf ein Minimum beschränken.

Für ein Maximum an Flexibilität bei der Suche nach Daten erstellen Sie in der Regel jedoch einen Index vom Typ text. Indizes vom Typ text bieten einen einfachen Mechanismus zur automatischen Indexierung aller Felder in den Dokumenten.

Aufgrund der höheren Flexibilität können Indizes vom Typ text mehr Zeit bei der Erstellung und mehr Speicherressourcen als Indizes vom Typ json beanspruchen.

Index erstellen

Sie können einen Index mit einem der folgenden Typen erstellen:

  • "type": "json"
  • "type": "text"

Index mit type=json erstellen

Zum Erstellen eines JSON-Index in der Datenbank $DATABASE senden Sie eine POST-Anforderung an /$DATABASE/_index mit einem JSON-Objekt, das den Index im Anforderungshauptteil beschreibt. Das Feld type des JSON-Objekts muss auf jsongesetzt sein. Ein JSON-Index kann partitioniert oder global sein. Diese Option wird im Feld partitioned festgelegt.

Im folgenden Beispiel wird HTTP verwendet, um einen Index vom Typ JSON anzufordern:

POST /$DATABASE/_index HTTP/1.1
Content-Type: application/json

Im folgenden Beispiel für ein JSON-Objekt wird ein partitionierter Index mit dem Namen foo-partitioned-index für das Feld mit dem Namen foo erstellt:

{
    "index": {
        "fields": ["foo"]
    },
    "name" : "foo-partitioned-index",
    "type" : "json",
    "partitioned": true
}

Im folgenden Beispiel für ein JSON-Objekt wird ein globaler Index mit dem Namen bar-global-index für das Feld mit dem Namen bar erstellt:

{
    "index": {
        "fields": ["bar"]
    },
    "name" : "bar-global-index",
    "type" : "json",
    "partitioned": false
}

Das folgende Beispiel für eine zurückgegebene JSON-Antwort bestätigt, dass der Index erstellt wurde:

{
    "result": "created"
}
Format des Anfragekörpers
Feld Beschreibung
index Felder - Ein JSON-Array mit Feldnamen, das die Sortiersyntax verwendet. Verschachtelte Felder sind ebenfalls zulässig, z. B. person.name.
ddoc (optional) Der Name des Entwurfsdokuments, in dem der Index erstellt wird. Standardmäßig wird jeder Index in einem eigenen Entwurfsdokument erstellt. Indizes können aus Effizienzgründen zu Entwurfsdokumenten gruppiert werden. Allerdings macht eine Änderung an einem Index in einem Entwurfsdokument alle anderen Indizes in demselben Dokument ungültig.
type (optional) Kann json oder text sein. Standardwert: json.
name (optional) Der Name des Index. Wenn kein Name angegeben wird, wird automatisch ein Name generiert.
partitioned (optional, boolesch) Legt fest, ob dieser Index partitioniert ist. Weitere Informationen finden Sie unter Feld partitioned.

Feld partitioned

Dieses Feld legt fest, ob der erstellte Index ein partitionierter oder globaler Index ist.

Aufgeteilte Feldwerte
Wert Beschreibung Anmerkungen
true Partitionierten Index erstellen. Kann nur in einer partitionierten Datenbank verwendet werden.
false Globalen Index erstellen. Kann in jeder Datenbank verwendet werden.

Der Standardwert für partitioned richtet sich nach der Einstellung 'Partitioniert' für die Datenbank:

Standardwert für die Partitionierung
Ist die Datenbank partitioniert? Standardwert für partitioned Zulässige Werte
Ja true true, false
Nein false false

It's important to reiterate that the default partitioned value is true für Indizes, die in einer partitionierten Datenbank erstellt werden. Dieser Standardwert bedeutet, dass der Index nicht zur Erfüllung globaler Abfragen verwendet werden kann.

Rückkehrcodes
Code Beschreibung
200 Der Index wurde erfolgreich erstellt oder war in der Datenbank vorhanden.
400 Ungültige Anforderung - Der Anforderungshauptteil hat nicht das angegebene Format.

Index mit type=text erstellen

Wenn Sie einen einzelnen Textindex erstellen, ist es ein bewährtes Verfahren, die Standardwerte zu verwenden. Allerdings können einige nützliche Indexattribute geändert werden.

Ein Index vom Typ text kann partitioniert oder global sein. Diese Option wird im Feld partitioned festgelegt.

Für Volltextindizes (Full Text Indexes - FTIs) muss das Attribut type auf den Wert text gesetzt werden.

Die Attribute name und ddoc dienen dazu, Indizes zu Entwurfsdokumenten zu gruppieren. Verwenden Sie die Attribute, um mithilfe eines angepassten Zeichenfolgewerts auf Indexgruppen zu verweisen. Wenn für diese Felder keine Werte angegeben werden, werden sie automatisch mit einem Hashwert gefüllt.

Wenn Sie mehrere Textindizes in einer Datenbank mit demselben Wert für ddoc erstellen, müssen Sie mindestens den Wert für ddoc und den Wert für name kennen. Wenn mehrere Indizes mit demselben Wert für ddoc erstellt werden, werden diese Indizes in dasselbe Entwurfsdokument eingefügt. Im Allgemeinen müssen Sie jeden Textindex in ein eigenes Entwurfsdokument einfügen.

Für weitere Informationen, finden Sie im Abschnitt Mehr über text Indizes.

Im folgenden Beispiel für ein JSON-Dokument wird die Erstellung eines partitionierten Index angefordert:

{
    "index": {
        "fields": [
            {
                "name": "Movie_name",
                "type": "string"
            }
        ]
    },
    "name": "Movie_name-text",
    "type": "text",
    "partitioned": true
}

Im folgenden Beispiel für ein JSON-Dokument wird die Erstellung eines globalen Index angefordert:

{
    "index": {
        "fields": [
            {
                "name": "Movie_name",
                "type": "string"
            }
        ]
    },
    "name": "Movie_name-text",
    "type": "text",
    "partitioned": false
}

Im folgenden Beispiel für ein JSON-Dokument wird die Erstellung eines komplexeren partitionierten Index angefordert:

{
    "type": "text",
    "name": "my-index",
    "ddoc": "my-index-design-doc",
    "index": {
        "default_field": {
            "enabled": true,
            "analyzer": "german"
        },
        "selector": {},
        "fields": [
            {"name": "married", "type": "boolean"},
            {"name": "lastname", "type": "string"},
            {"name": "year-of-birth", "type": "number"}
        ]
    },
    "partitioned": true
}

Feld index

Das Feld index enthält Einstellungen, die speziell für Textindizes gelten.

Wenn alle Felder in allen Dokumenten automatisch indexiert werden sollen, verwenden Sie die folgende einfache Syntax:

"index": {}

Der Indexierungsprozess arbeitet Felder in allen Dokumenten in der Datenbank durch.

In der Demo-Datenbank der Beispielfilme sehen Sie ein Beispiel für einen Textindex, der alle Felder und alle Dokumente in einer Datenbank enthält.

Gehen Sie beim Indexieren aller Felder in allen Dokumenten für große Datasets mit Vorsicht vor, da dies eine sehr ressourcenaufwändige Aktivität sein kann.

Im folgenden Beispiel für ein JSON-Dokument wird die Erstellung eines Index aller Felder in allen Dokumenten angefordert:

{
	"type": "text",
	"index": { }
}

Feld default_field

Der Wert im Feld default_field gibt an, wie der Operator $text mit dem Index verwendet werden kann.

Das Feld default_field enthält zwei Schlüssel:

Default_field Feldschlüssel
Schlüssel Beschreibung
enabled Aktiviert oder inaktiviert den Standardfeldindex (default_field index). Der Standardwert ist true.

Der Schlüssel analyzer im Feld default_field gibt an, wie der Index Text analysiert. Später kann der Index mithilfe des Operators $text abgefragt werden. Weitere Informationen zu alternativen Analysefunktionen finden Sie in der Suchdokumentation. Sie können eine andere Analysefunktion auswählen, wenn Dokumente in anderen Sprachen als Englisch indexiert werden oder wenn andere Sonderanforderungen für die Analysefunktion, wie zum Beispiel das Abgleichen von E-Mail-Adressen, zu berücksichtigen sind.

Wenn das Feld default_field nicht angegeben wird oder wenn es mit einem leeren Objekt angegeben wird, wird der Standardwert true angenommen und die Analysefunktion standard verwendet.

Array fields

Das Array fields enthält eine Liste von Feldern, die für jedes Dokument indexiert werden müssen. Wenn Sie wissen, dass ein Index nur bestimmte Felder abfragt, kann ein solches Feld dazu verwendet werden, die Größe des Index zu begrenzen. Für jedes Feld muss darüber hinaus ein Typ angegeben werden, für den indexiert wird. Die zulässigen Typen sind in der folgenden Liste aufgeführt:

  • "boolean"
  • "string"
  • "number"

Feld index_array_lengths

IBM Cloudant Query-Textindizes besitzen eine Eigenschaft mit dem Namen index_array_lengths. Wenn die Eigenschaft nicht explizit festgelegt wird, gilt der Standardwert true.

Wenn das Feld auf den Wert true gesetzt wird, erfordert der Index zusätzlichen Arbeitsaufwand. Dieser Arbeitsaufwand umfasst einen Scan jedes Dokuments auf Arrays und die Erstellung eines Felds, das die Länge für jedes gefundene Array aufnimmt.

In den folgenden Situationen kann es sinnvoll sein, das Feld index_array_lengths auf den Wert false zu setzen:

  • Sie müssen die Länge eines Arrays nicht kennen.
  • Sie verwenden den Operator $size nicht.
  • Die Dokumente in Ihrer Datenbank sind komplex oder unterliegen nicht vollständig Ihrer Kontrolle. Infolgedessen ist es schwierig, die Auswirkungen der zusätzlichen Verarbeitung zu schätzen, die zum Bestimmen und Speichern der Array-Längen erforderlich wird.

Der Operator $size erfordert, dass Sie das Feld index_array_lengths auf true setzen. Andernfalls funktioniert der Operator nicht.

Im folgenden Beispiel für ein JSON-Dokument werden die vorgeschlagenen Einstellungen zur Optimierung der Leistung auf Produktionssystemen gezeigt:

{
	"default_field": {
		"enabled": false
	},
	"index_array_lengths": false
}

Feld partitioned

Dieses Feld bestimmt, ob der erstellte Index ein partitionierter oder globaler Index ist.

Aufgeteilte Feldwerte
Wert Beschreibung Anmerkungen
true Partitionierten Index erstellen. Kann nur in einer partitionierten Datenbank verwendet werden.
false Globalen Index erstellen. Kann in jeder Datenbank verwendet werden.

Der Standardwert für partitioned richtet sich nach der Einstellung 'Partitioniert' für die Datenbank:

Partitionierte Einstellungen für die Datenbank
Ist die Datenbank partitioniert? Standardwert für partitioned Zulässige Werte
Ja true true, false
Nein false false