IBM Cloudant Query verwenden
In diesem Lernprogramm zeigen wir, wie ein Index erstellt wird und wie der Index verwendet wird, um die Datenbank abzufragen. Sie lernen auch, verschiedene Arten von Abfragen zu erstellen, um Daten einfacher zu finden.
Hier führen Sie die Befehle über die Befehlszeile aus, aber Sie können diese Tasks auch mithilfe des IBM® Cloudant® for IBM Cloud®-Dashboards ausführen, das Ihnen ein visuelles Beispiel für jede Task gibt. Weitere Informationen zum Dashboard finden Sie im Lernprogramm IBM Cloudant-Dashboard verwenden.
Vorbereitende Schritte
Bevor Sie beginnen, arbeiten Sie die folgenden Lernprogramme durch, um eine Instanz zu erstellen, eine Datenbank zu erstellen und die Datenbank zu füllen.
- Erstellen Sie eine IBM Cloudant-Instanz.
- Datenbank erstellen.
- Datenbank füllen.
- (Optional) Erstellen Sie einen
acurl
Aliasnamen.
Wenn Sie sich dagegen entscheiden, acurl
einzurichten, verwenden Sie stattdessen die folgende URL mit curl
anstelle des in der Übung bereitgestellten Befehls: curl "https://$USERNAME:$PASSWORD@$ACCOUNT.cloudant.com/databasedemo"
.
Der acurl
-Alias ist sicherer. Es verhindert, dass jemand während Ihrer Eingabe Ihr Kennwort mitliest. Außerdem wird durch die Durchsetzung von HTTPS sichergestellt, dass Ihr Kennwort nicht in Klartext über das Netz gesendet wird.
Jetzt können Sie lernen, wie Sie Abfragen für die Datenbank ausführen, die Sie in Schritt 2 unter Vorbereitende Schritteerstellt haben.
Index erstellen
IBM Cloudant Query verwendet eine Abfragesyntax im Mongo-Stil für die Suche nach Dokumenten mithilfe logischer Operatoren. IBM Cloudant Query ist eine Kombination aus einer Ansicht und einem Suchindex.
Wenn Sie IBM Cloudant Query verwenden, durchsucht der Abfrageplaner den Selektor (Ihre Abfrage), um den richtigen Index für die Auswahl zu ermitteln. Im Speicher werden die Dokumente mithilfe des Selektors herausgefiltert (d. h. Sie können auch ohne Index nach verschiedenen Feldern abfragen).
Wenn kein definierter Index mit der angegebenen Abfrage übereinstimmt, verwendet IBM Cloudant den Index _all_docs
, der Dokumente nach ID sucht. Im ungünstigsten Fall werden alle Dokumente nach ID zurückgegeben (vollständige Tabellensuche).
Vollständige Tabellensuchen sind kostenintensiv in der Verarbeitung. Es wird empfohlen, einen Index zu erstellen.
Führen Sie die folgenden Schritte aus, um einen Index zu erstellen:
-
Kopieren Sie die folgenden JSON-Beispieldaten in eine Datei mit dem Namen
query-demo-index.json
:{ "index": { "fields": [ "descriptionField", "temperatureField" ], "partial_filter_selector": { "descriptionField": { "$eq": "hot" }, "temperatureField": { "$gt": 50 } } }, "ddoc": "query-demo-index", "type": "json" }
-
Führen Sie den folgenden Befehl aus, um einen Index zu erstellen:
acurl "https://$ACCOUNT.cloudant.com/databasedemo/_index" \ -X POST \ -H "Content-Type: application/json" \ -d \@query-demo-index.json
-
Überprüfen Sie die Ergebnisse:
{ "result": "created", "id": "_design/query-demo-index", "name": "490441584f9eddb8d09ef234d636b5f3b18e4ce6" }
Es ist nicht erforderlich, einen Index für die Ausführung einer Abfrage zu erstellen. Wenn Sie es jedoch nicht tun, wird die folgende Warnung mit Ihren Ergebnissen als Hinweis darauf aufgenommen, dass die Erstellung eines Index den Verarbeitungsaufwand
verringern und Ihre Abfragen effektiver machen würde. "Warning": "No matching index found, create an index to optimize query time."
Einfache Abfrage ausführen
Dieses Beispiel zeigt, wie IBM Cloudant Query Dokumente auf Grundlage des Beschreibungsfelds descriptionField
mit dem Wert boiling
findet.
Führen Sie die folgenden Schritte aus, um die Abfrage auszuführen:
- Kopieren Sie die folgende JSON-Beispieldatei in eine Datendatei namens
query1.json
:{ "selector": { "descriptionField": "boiling" } }
- Führen Sie den folgenden Befehl aus, um die Datenbank abzufragen:
acurl "https://$ACCOUNT.cloudant.com/databasedemo/_find" \ -X POST \ -H "Content-Type: application/json" \ -d \@query1.json
- Überprüfen Sie die Abfrageergebnisse:
{ "docs": [{ "_id": "91d1fa833d28efe15069604f98de701d", "_rev": "1-f998fc7b89d4466c1e7bb204b1b00f74", "numberField": 1, "nameField": "one", "descriptionField": "boiling", "temperatureField": 100 }], "bookmark": "g1AAAABweJzLYWBgYMpgSmHgKy5JLCrJTq2MT8lPzkzJBYorWBqmGKYlWhgbpxhZpKalGpoamFmaGZikWVqkpJobGKaA9HHA9BGlIwsAmn8eLw", "warning": "No matching index found, create an index to optimize query time." }
Als nächstes suchen Sie ein Dokument mithilfe von zwei Feldern in der Datenbank.
Abfrage mit zwei Feldern ausführen
In diesem Beispiel werden zwei Felder verwendet, um ein Dokument mit den folgenden Werten zu finden: freezing
und -5
.
Die Suche wird mithilfe eines Selektorausdrucks beschrieben, der wie im folgenden Beispiel aussieht:
{
"selector": {
"descriptionField": "freezing",
"temperatureField": -5
}
}
Sie können die Ergebnisse anpassen, indem Sie weitere Details innerhalb des Selektorausdrucks hinzufügen. Der Parameter fields
gibt die Felder an, die in die Ergebnisse eingeschlossen werden sollen. Im vorliegenden Beispiel enthalten
die Ergebnisse das Namensfeld nameField
, das Beschreibungsfeld descriptionField
und das Temperaturfeld temperatureField
.
{
...
"fields": [
"nameField",
"descriptionField",
"temperatureField"
]
}
Führen Sie die folgenden Schritte aus, um die Abfrage auszuführen:
- Kopieren Sie die Beispiel-JSON in eine Datendatei namens
query2.json
.{ "selector": { "descriptionField": "freezing", "temperatureField": -5 }, "fields": [ "nameField", "descriptionField", "temperatureField" ] }
- Führen Sie den folgenden Befehl aus, um die Datenbank abzufragen:
acurl "https://$ACCOUNT.cloudant.com/databasedemo/_find" \ -X POST \ -H "Content-Type: application/json" \ -d \@query2.json
- Überprüfen Sie die Abfrageergebnisse:
{ "docs": [{ "nameField": "eight", "descriptionField": "freezing", "temperatureField": -5 }], "bookmark": "g1AAAABweJzLYWBgYMpgSmHgKy5JLCrJTq2MT8lPzkzJBYorpBiYGJolWaSZmaWYpFqmGBiYmKclphhappqZmRglG5uD9HHA9BGlIwsAms8eJw", "warning": "No matching index found, create an index to optimize query time." }
Danach suchen Sie ein Dokument mithilfe mehrerer Operatoren in der Datenbank.
Abfrage mit Operatoren ausführen
In diesem Beispiel werden die Operatoren $gt
(größer als) und $eq
(gleich) verwendet, um nach Dokumenten zu suchen, die eine Temperatur enthalten, die größer als 20
Grad ist und eine Beschreibung, die den
Wert hot
enthält. Die Ergebnisse, die in absteigender Reihenfolge der Temperatur angezeigt werden, umfassen das Beschreibungsfeld descriptionField
und das Temperaturfeld temperatureField
.
Sie verwenden einen Selektorausdruck wie im folgenden Beispiel:
{
"selector": {
"temperatureField": {
"$gt": 50
},
"descriptionField": {
"$eq": "hot"
}
},
"fields": [
"descriptionField",
"temperatureField"
],
"sort": [{
"temperatureField": "desc"
}],
"use_index": "_design/query-demo-index"
}
Führen Sie die folgenden Schritte aus, um die Abfrage auszuführen:
- Kopieren Sie die folgende Beispiel-JSON in eine Datei mit dem Namen
query3.json
.{ "selector": { "descriptionField": { "$eq": "hot" }, "temperatureField": { "$gt": 50 } }, "fields": [ "descriptionField", "temperatureField" ], "sort": [{ "temperatureField": "desc" }], "use_index": "_design/query-demo-index" }
- Führen Sie diese Abfrage aus:
acurl "https://$ACCOUNT.cloudant.com/databasedemo/_find" \ -X POST \ -H "Content-Type: application/json" \ -d \@query3.json
- Überprüfen Sie die Abfrageergebnisse:
{ "docs": [{ "descriptionField": "hot", "temperatureField": 97 }, { "descriptionField": "hot", "temperatureField": 75 } ], "bookmark": "g1AAAABbeJzLYWBgYMpgSmHgKy5JLCrJTq2MT8lPzkzJBYorJBoYmKWaWVokpZkamJtaGJskm5slmSenGhulWpibJhqC9HHA9OWATErUAGlkzsgvycoCAEsUF_A" }
Jetzt wissen Sie, wie Sie Daten aus Ihrer Datenbank mithilfe von IBM Cloudant Query extrahieren können. Weitere Informationen finden Sie in der IBM Cloudant-Dokumentation.