Elasticsearch - API-Konventionen
Application Programming Interface (API) im Web ist eine Gruppe von Funktionsaufrufen oder anderen Programmieranweisungen für den Zugriff auf die Softwarekomponente in dieser bestimmten Webanwendung. Beispielsweise hilft die Facebook-API einem Entwickler beim Erstellen von Anwendungen, indem er auf Daten oder andere Funktionen von Facebook zugreift. Dies kann ein Geburtsdatum oder eine Statusaktualisierung sein.
Elasticsearch bietet eine REST-API, auf die JSON über HTTP zugreift. Elasticsearch verwendet einige Konventionen, die wir jetzt diskutieren werden.
Mehrere Indizes
Die meisten Operationen, hauptsächlich Such- und andere Operationen, in APIs beziehen sich auf einen oder mehrere Indizes. Dies hilft dem Benutzer, an mehreren Stellen oder in allen verfügbaren Daten zu suchen, indem nur eine Abfrage einmal ausgeführt wird. Viele verschiedene Notationen werden verwendet, um Operationen in mehreren Indizes auszuführen. Wir werden einige davon hier in diesem Kapitel diskutieren.
Kommagetrennte Notation
POST /index1,index2,index3/_search
Text anfordern
{
"query":{
"query_string":{
"query":"any_string"
}
}
}
Antwort
JSON-Objekte aus index1, index2, index3 mit any_string.
_all Schlüsselwort für alle Indizes
POST /_all/_search
Text anfordern
{
"query":{
"query_string":{
"query":"any_string"
}
}
}
Antwort
JSON-Objekte aus allen Indizes und mit any_string.
Platzhalter (*, +, -)
POST /school*/_search
Text anfordern
{
"query":{
"query_string":{
"query":"CBSE"
}
}
}
Antwort
JSON-Objekte aus allen Indizes, die mit der Schule beginnen und CBSE enthalten.
Alternativ können Sie auch den folgenden Code verwenden:
POST /school*,-schools_gov /_search
Text anfordern
{
"query":{
"query_string":{
"query":"CBSE"
}
}
}
Antwort
JSON-Objekte aus allen Indizes, die mit "school" beginnen, jedoch nicht aus school_gov und mit CBSE.
Es gibt auch einige Parameter für URL-Abfragezeichenfolgen -
- ignore_unavailable- Es tritt kein Fehler auf oder es wird kein Vorgang gestoppt, wenn der eine oder die mehreren in der URL vorhandenen Indizes nicht vorhanden sind. Beispielsweise existiert ein Schulindex, aber book_shops existiert nicht.
POST /school*,book_shops/_search
Text anfordern
{
"query":{
"query_string":{
"query":"CBSE"
}
}
}
Text anfordern
{
"error":{
"root_cause":[{
"type":"index_not_found_exception", "reason":"no such index",
"resource.type":"index_or_alias", "resource.id":"book_shops",
"index":"book_shops"
}],
"type":"index_not_found_exception", "reason":"no such index",
"resource.type":"index_or_alias", "resource.id":"book_shops",
"index":"book_shops"
},"status":404
}
Betrachten Sie den folgenden Code -
POST /school*,book_shops/_search?ignore_unavailable = true
Text anfordern
{
"query":{
"query_string":{
"query":"CBSE"
}
}
}
Antwort (kein Fehler)
JSON-Objekte aus allen Indizes, die mit der Schule beginnen und CBSE enthalten.
allow_no_indices
trueDer Wert dieses Parameters verhindert Fehler, wenn eine URL mit Platzhalter keine Indizes ergibt. Zum Beispiel gibt es keinen Index, der mit school_pri beginnt -
POST /schools_pri*/_search?allow_no_indices = true
Text anfordern
{
"query":{
"match_all":{}
}
}
Antwort (keine Fehler)
{
"took":1,"timed_out": false, "_shards":{"total":0, "successful":0, "failed":0},
"hits":{"total":0, "max_score":0.0, "hits":[]}
}
expand_wildcards
Dieser Parameter entscheidet, ob die Platzhalter erweitert werden müssen, um Indizes zu öffnen oder zu schließen, oder ob beide ausgeführt werden sollen. Der Wert dieses Parameters kann offen und geschlossen sein oder keiner und alle.
Zum Beispiel schließen Indexschulen -
POST /schools/_close
Antwort
{"acknowledged":true}
Betrachten Sie den folgenden Code -
POST /school*/_search?expand_wildcards = closed
Text anfordern
{
"query":{
"match_all":{}
}
}
Antwort
{
"error":{
"root_cause":[{
"type":"index_closed_exception", "reason":"closed", "index":"schools"
}],
"type":"index_closed_exception", "reason":"closed", "index":"schools"
}, "status":403
}
Datum Math Support in Indexnamen
Elasticsearch bietet eine Funktion zum Suchen von Indizes nach Datum und Uhrzeit. Wir müssen Datum und Uhrzeit in einem bestimmten Format angeben. Beispiel: Der Kontodetail-2015.12.30, Index speichert die Bankkontodaten vom 30. Dezember 2015. Mathematische Operationen können ausgeführt werden, um Details für ein bestimmtes Datum oder einen Bereich von Datum und Uhrzeit abzurufen.
Format für Datum Mathe Indexname -
<static_name{date_math_expr{date_format|time_zone}}>
/<accountdetail-{now-2d{YYYY.MM.dd|utc}}>/_search
static_name ist ein Teil des Ausdrucks, der in jedem mathematischen Datumsindex wie bei den Kontodetails gleich bleibt. date_math_expr enthält den mathematischen Ausdruck, der Datum und Uhrzeit dynamisch wie jetzt-2d bestimmt. date_format enthält das Format, in dem das Datum in einen Index wie YYYY.MM.dd geschrieben wird. Wenn das heutige Datum der 30. Dezember 2015 ist, gibt <accountdetail- {now-2d {YYYY.MM.dd}}> accountdetail-2015.12.28 zurück.
Ausdruck | Beschließt zu |
---|---|
<accountdetail- {now-d}> | accountdetail-2015.12.29 |
<accountdetail- {now-M}> | accountdetail-2015.11.30 |
<accountdetail- {now {YYYY.MM}}> | accountdetail-2015.12 |
Wir werden nun einige der in Elasticsearch verfügbaren allgemeinen Optionen sehen, mit denen die Antwort in einem bestimmten Format abgerufen werden kann.
Hübsche Ergebnisse
Wir können eine Antwort in einem gut formatierten JSON-Objekt erhalten, indem wir einfach einen URL-Abfrageparameter anhängen, dh ziemlich = wahr.
POST /schools/_search?pretty = true
Text anfordern
{
"query":{
"match_all":{}
}
}
Antwort
……………………..
{
"_index" : "schools", "_type" : "school", "_id" : "1", "_score" : 1.0,
"_source":{
"name":"Central School", "description":"CBSE Affiliation",
"street":"Nagan", "city":"paprola", "state":"HP", "zip":"176115",
"location": [31.8955385, 76.8380405], "fees":2000,
"tags":["Senior Secondary", "beautiful campus"], "rating":"3.5"
}
}
………………….
Vom Menschen lesbare Ausgabe
Diese Option kann die statistischen Antworten entweder in eine vom Menschen lesbare Form (wenn Mensch = wahr) oder in eine vom Computer lesbare Form (wenn Mensch = falsch) ändern. Wenn beispielsweise human = true, dann distance_kilometer = 20KM und wenn human = false, ist distance_kilometer = 20000, wenn die Antwort von einem anderen Computerprogramm verwendet werden muss.
Antwortfilterung
Wir können die Antwort auf weniger Felder filtern, indem wir sie im Parameter field_path hinzufügen. Zum Beispiel,
POST /schools/_search?filter_path = hits.total
Text anfordern
{
"query":{
"match_all":{}
}
}
Antwort
{"hits":{"total":3}}