Elasticsearch - API dokumentów
Elasticsearch udostępnia interfejsy API dla pojedynczych dokumentów i interfejsów API z wieloma dokumentami, w których wywołanie interfejsu API jest skierowane odpowiednio do pojedynczego dokumentu i wielu dokumentów.
Index API
Pomaga dodać lub zaktualizować dokument JSON w indeksie, gdy żądanie jest skierowane do tego odpowiedniego indeksu z określonym mapowaniem. Na przykład poniższe żądanie spowoduje dodanie obiektu JSON do indeksowania szkół i mapowania szkół -
PUT schools/_doc/5
{
name":"City School", "description":"ICSE", "street":"West End",
"city":"Meerut",
"state":"UP", "zip":"250002", "location":[28.9926174, 77.692485],
"fees":3500,
"tags":["fully computerized"], "rating":"4.5"
}
Po uruchomieniu powyższego kodu otrzymujemy następujący wynik -
{
"_index" : "schools",
"_type" : "_doc",
"_id" : "5",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 2,
"_primary_term" : 1
}
Automatyczne tworzenie indeksu
W przypadku żądania dodania obiektu JSON do określonego indeksu i jeśli ten indeks nie istnieje, ten interfejs API automatycznie tworzy ten indeks, a także podstawowe mapowanie dla tego konkretnego obiektu JSON. Funkcję tę można wyłączyć, zmieniając wartości poniższych parametrów na false, które są obecne w pliku flexiblesearch.yml.
action.auto_create_index:false
index.mapper.dynamic:false
Możesz również ograniczyć automatyczne tworzenie indeksu, w którym dozwolone są tylko nazwy indeksu z określonymi wzorami, zmieniając wartość następującego parametru -
action.auto_create_index:+acc*,-bank*
Note - Tutaj + oznacza dozwolone, a - oznacza niedozwolone.
Wersjonowanie
Elasticsearch zapewnia również funkcję kontroli wersji. Możemy użyć parametru zapytania o wersję, aby określić wersję konkretnego dokumentu.
PUT schools/_doc/5?version=7&version_type=external
{
"name":"Central School", "description":"CBSE Affiliation", "street":"Nagan",
"city":"paprola", "state":"HP", "zip":"176115", "location":[31.8955385, 76.8380405],
"fees":2200, "tags":["Senior Secondary", "beautiful campus"], "rating":"3.3"
}
Po uruchomieniu powyższego kodu otrzymujemy następujący wynik -
{
"_index" : "schools",
"_type" : "_doc",
"_id" : "5",
"_version" : 7,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 3,
"_primary_term" : 1
}
Wersjonowanie jest procesem w czasie rzeczywistym i operacje wyszukiwania w czasie rzeczywistym nie mają na niego wpływu.
Istnieją dwa najważniejsze typy wersjonowania -
Wersjonowanie wewnętrzne
Przechowywanie wersji wewnętrznej to wersja domyślna, która zaczyna się od 1 i zwiększa się wraz z każdą aktualizacją, łącznie z usuwaniem.
Wersjonowanie zewnętrzne
Jest używany, gdy wersjonowanie dokumentów jest przechowywane w systemie zewnętrznym, takim jak systemy wersjonowania stron trzecich. Aby włączyć tę funkcjonalność, musimy ustawić typ_wersji na zewnętrzny. Tutaj Elasticsearch będzie przechowywać numer wersji wskazany przez system zewnętrzny i nie zwiększy ich automatycznie.
Typ operacji
Typ operacji służy do wymuszania operacji tworzenia. Pomaga to uniknąć nadpisywania istniejącego dokumentu.
PUT chapter/_doc/1?op_type=create
{
"Text":"this is chapter one"
}
Po uruchomieniu powyższego kodu otrzymujemy następujący wynik -
{
"_index" : "chapter",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
Automatyczne generowanie ID
Gdy identyfikator nie jest określony w operacji indeksowania, Elasticsearch automatycznie generuje identyfikator dla tego dokumentu.
POST chapter/_doc/
{
"user" : "tpoint",
"post_date" : "2018-12-25T14:12:12",
"message" : "Elasticsearch Tutorial"
}
Po uruchomieniu powyższego kodu otrzymujemy następujący wynik -
{
"_index" : "chapter",
"_type" : "_doc",
"_id" : "PVghWGoB7LiDTeV6LSGu",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}
Pobierz API
API pomaga wyodrębnić obiekt typu JSON, wykonując żądanie pobierania dla określonego dokumentu.
pre class="prettyprint notranslate" > GET schools/_doc/5
Po uruchomieniu powyższego kodu otrzymujemy następujący wynik -
{
"_index" : "schools",
"_type" : "_doc",
"_id" : "5",
"_version" : 7,
"_seq_no" : 3,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "Central School",
"description" : "CBSE Affiliation",
"street" : "Nagan",
"city" : "paprola",
"state" : "HP",
"zip" : "176115",
"location" : [
31.8955385,
76.8380405
],
"fees" : 2200,
"tags" : [
"Senior Secondary",
"beautiful campus"
],
"rating" : "3.3"
}
}
Ta operacja jest wykonywana w czasie rzeczywistym i nie ma na nią wpływu częstotliwość odświeżania indeksu.
Możesz również określić wersję, wtedy Elasticsearch pobierze tylko tę wersję dokumentu.
Możesz również określić _all w żądaniu, aby Elasticsearch mogło wyszukać ten identyfikator dokumentu w każdym typie i zwróci pierwszy pasujący dokument.
Możesz również określić pola, które chcesz w wyniku z tego konkretnego dokumentu.
GET schools/_doc/5?_source_includes=name,fees
Po uruchomieniu powyższego kodu otrzymujemy następujący wynik -
{
"_index" : "schools",
"_type" : "_doc",
"_id" : "5",
"_version" : 7,
"_seq_no" : 3,
"_primary_term" : 1,
"found" : true,
"_source" : {
"fees" : 2200,
"name" : "Central School"
}
}
Możesz również pobrać część źródłową w swoim wyniku, po prostu dodając część _source w żądaniu get.
GET schools/_doc/5?_source
Po uruchomieniu powyższego kodu otrzymujemy następujący wynik -
{
"_index" : "schools",
"_type" : "_doc",
"_id" : "5",
"_version" : 7,
"_seq_no" : 3,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "Central School",
"description" : "CBSE Affiliation",
"street" : "Nagan",
"city" : "paprola",
"state" : "HP",
"zip" : "176115",
"location" : [
31.8955385,
76.8380405
],
"fees" : 2200,
"tags" : [
"Senior Secondary",
"beautiful campus"
],
"rating" : "3.3"
}
}
Możesz również odświeżyć fragment przed wykonaniem operacji get, ustawiając parametr refresh na wartość true.
Usuń API
Możesz usunąć określony indeks, mapowanie lub dokument, wysyłając żądanie HTTP DELETE do Elasticsearch.
DELETE schools/_doc/4
Po uruchomieniu powyższego kodu otrzymujemy następujący wynik -
{
"found":true, "_index":"schools", "_type":"school", "_id":"4", "_version":2,
"_shards":{"total":2, "successful":1, "failed":0}
}
Można określić wersję dokumentu, aby usunąć tę konkretną wersję. Można określić parametr routingu, aby usunąć dokument od określonego użytkownika, a operacja zakończy się niepowodzeniem, jeśli dokument nie należy do tego konkretnego użytkownika. W tej operacji można określić opcję odświeżania i limitu czasu tak samo, jak GET API.
Zaktualizuj API
Do wykonania tej operacji używany jest skrypt, a przechowywanie wersji służy do upewnienia się, że podczas pobierania i ponownego indeksowania nie nastąpiły żadne aktualizacje. Na przykład możesz zaktualizować czesne za pomocą skryptu -
POST schools/_update/4
{
"script" : {
"source": "ctx._source.name = params.sname",
"lang": "painless",
"params" : {
"sname" : "City Wise School"
}
}
}
Po uruchomieniu powyższego kodu otrzymujemy następujący wynik -
{
"_index" : "schools",
"_type" : "_doc",
"_id" : "4",
"_version" : 3,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 4,
"_primary_term" : 2
}
Aktualizację możesz sprawdzić, wysyłając prośbę o pobranie do zaktualizowanego dokumentu.