Práce s databázemi je velmi zábavná, ale někdy může být náročná, zejména při práci s již existujícími daty.
Například pokud chcete změnit typ konkrétního pole, může to vyžadovat, abyste službu sundali, což může mít vážné následky, zejména ve službách, které zpracovávají velké množství dat.
Naštěstí můžeme použít výkonné funkce Elasticsearch, jako je Reindexing, přijímání uzlů, potrubí a procesorů, aby tyto úkoly byly velmi snadné.
Tento kurz vám ukáže, jak změnit typ pole v konkrétním indexu na jiný pomocí uzlů Elasticsearch Ingest. Použití tohoto přístupu eliminuje prostoje, které ovlivňují služby, a přitom se stále řídí provádění úkolů změny typu pole.
Úvod do uzlů příjmu
Uzel příjmu Elasticsearch umožňuje předběžné zpracování dokumentů před jejich indexováním.
Uzel Elasticsearch je specifická instance Elasticsearch; připojené uzly (více než jeden) tvoří jeden klastr.
Můžete zobrazit uzly dostupné v běžícím klastru s požadavkem:
ZÍSKAT / _uzly /Příkaz cURL je následující:
curl -XGET „http: // localhost: 9200 / _nodes /“Provedení tohoto příkazu by vám mělo poskytnout rozsáhlé informace o uzlech, jak je znázorněno níže (zkrácený výstup):
"_nodes":
"celkem": 3,
„successful“: 3,
"failed": 0
,
"cluster_name": "22e0bee6ef91461d82d9b0f1b4b13b4a",
"nodes":
"gSlMjTKyTemoOX-EO7Em4w":
"name": "instance-0000000003",
"transport_address": "172.28.86.133: 19925 ",
"host": "172.28.86.133 ",
"ip": "172.28.86.133 ",
"version": "7.10.2 ",
"build_flavor": "výchozí",
"build_type": "ukotvitelný panel",
"build_hash": "747e1cc71def077253878a59143c1f785afa92b9",
"total_indexing_buffer": 214748364,
"role": [
"data",
„data_cold“,
"data_content",
"data_hot",
„data_warm“,
"pohltit",
"mistr",
"remote_cluster_client",
"přeměnit"
],
"atributy" :
"logical_availability_zone": "zone-0",
"server_name": "instance-0000000003.22e0bee6ef91461d82d9b0f1b4b13b4a ",
"availability_zone": "us-west-1c",
"xpack.".nainstalován ":" true ",
"instance_configuration": "aws.data.highio.i3 ",
"přeměnit.node ":" true ",
"region": "us-west-1"
,
"settings":
"s3":
"client":
"elastic-internal-22e0be":
"endpoint": "s3-us-west-1.amazonky.com "
,
--------------------------------výstup zkrácen---------------------
Ve výchozím nastavení všechny uzly Elasticsearch umožňují přijímání a jsou schopné zpracovávat přijímací operace. Pro těžké operace s příjmem však můžete vytvořit jeden uzel vyhrazený pouze pro příjem.
Abychom zvládli pre_process, musíme před indexováním dokumentů definovat kanál, který uvádí řadu preprocesorů.
Preprocesory jsou sady instrukcí zabalených kolem kanálu a jsou prováděny jeden po druhém.
Následuje obecná syntaxe toho, jak definovat kanál:
"description": "Převést mě",
"procesory": [
"konvertovat" :
"field": "id",
"type": "integer"
]
Vlastnost description říká, čeho by měl kanál dosáhnout. Dalším parametrem jsou preprocesory předávané jako seznam v pořadí jejich provedení.
Vytvořte Convert Pipeline
Chcete-li vytvořit kanál, který použijeme k převodu typu, použijte požadavek PUT s koncovým bodem API _ingest jako:
PUT _ingest / pipeline / convert_pipeline„Description“: „převede pole dayOfWeek na dlouhé celé číslo“,
"procesory": [
"konvertovat" :
"field": "dayOfWeek",
"type": "long"
]
Pro cURL použijte příkaz:
curl -XPUT "http: // localhost: 9200 / _ingest / pipeline / convert_pipeline" -H 'Content-Type: application / json' -d '"description": "převede pole dayOfWeek na dlouhý z celého čísla", " processors ": [" convert ": " field ":" dayOfWeek "," type ":" long "] ''Reindex a převod Typ
Jakmile máme kanál v uzlu příjmu, vše, co musíme udělat, je zavolat indexovací API a předat kanál jako argument v cíli těla žádosti jako:
POST _reindex„Source“:
"index": "kibana_sample_data_flights"
,
"dest":
"index": "kibana_sample_type_diff",
"pipeline": "convert_pipeline"
Pro CURL:
curl -XPOST "http: // localhost: 9200 / _reindex" -H 'Content-Type: application / json' -d '"source": "index": "kibana_sample_data_flights", "dest": "index ":" kibana_sample_type_diff "," pipeline ":" convert_pipeline " 'Ověření převodu
Chcete-li ověřit, že se kanál správně použil, použijte požadavek GET k načtení konkrétního pole jako:
GET / kibana_sample_data_flights / _mapping / pole / dayOfWeekGET / kibana_sample_type_diff / _mapping / field / dayOfWeek
To by mělo vrátit data jako:
-----------------------ORIGINÁLNÍ INDEX---------------------------"kibana_sample_data_flights":
"mapování":
"den v týdnu" :
"full_name": "dayOfWeek",
"mapování":
"den v týdnu" :
"type": "integer"
-------------------------REINDEXOVANÁ DATA-------------------------------
"kibana_sample_type_diff":
"mapování":
"den v týdnu" :
"full_name": "dayOfWeek",
"mapování":
"den v týdnu" :
"type": "long"
Závěr
V této příručce jsme se podívali na to, jak pracovat s uzly Elasticsearch Ingest k předběžnému zpracování dokumentů před indexováním, a tak převádět pole z jednoho typu na jiný.
Další informace najdete v dokumentaci.
https: // www.elastický.co / guide / en / elasticsearch / reference / master / ingest.html