7,540
edits
Changes
→Routing vs custom Routing
A modulo osztás biztosítja, hogy mindig egy valid shard számot kapjunk.
Ha ezt külön nem adjuk meg, akkor a dokumentum ID -ja lesz a '''_routing''' változó értéke. A dokumentum ID mezőjét vagy mi adjuk meg a dokumentum beszúrásakor a '''_ID''' paraméterrel, vagy az Elasticsearch-re bízzuk, hogy vegye elő a következő szabad ID-t. Ez A document id -> routing id behelyettesítés biztosítja, hogy egyenletesen legyenek elosztva a dokumentumok az összes shard között, a keresés és a beszúrás is teljesen átlátszó a felhasználók számára shard szempontból.
Mikor rákeresünk egy dokumentumra, alap esetben alapesetben az Elasticsearch-nek fogalma sincs, hogy melyik shard-ban van a dokumentum, így kiküld egy broadcast üzenetet az összes node-nak, akik ezt továbbítják párhuzamosan az összes shard-re, majd minden shard visszaküldi a keresés eredményét a gateway node-nak. Ez gyors, viszont nagyon erőforrás intenzív. A dokumentum mindig csak 1 darab primary shard-en van. Ha 20 primary shard-et használ az index, akkor ez 19 darab "felesleges" keresés.
Lehetőség van rá, hogy egyrészt beszúráskor megmondjuk az Elasticsearch-nek hogy melyik shard-re tegye a dokumentumot, illetve keresésnél megmondhatjuk, hogy melyiken keresse, ezzel eliminálhatjuk a felesleges kereséseket. Ezt hívják custom routing-nak.
Ha elhatároztuk hogy egy dokumentumot egész indexre, vagy típusra custom routing-al szúrunk be úgy is kell keresni. Erre ot akarunk használni, akkor best-practice ha beállítjuk vagy az index-en vagy az index egyik típusára, hogy csak olyan dokumentumokat fogadjon elaz Elasticsearch az adott indexbe/típusba, ahol meg van adva a custom routing.
A az előbb létrehozott '''mycompany''' index-be hozzunk létre egy '''order''' típust, amin beállítjuk, hogy csak custom routing-al megadott dokumentumokat lehet beleszúrni.
'
</pre>
{{note|Fizikailag nem tudjuk, hogy melyik shard-re fog kerülni a dokumentum. Csak azt mondtuk meg az Elasticsearch-nek, hogy mikor a hash-t képzi, akkor a routing-id helyére a képlet-be azt írja be hogy '''user123'''. Mikor a keresésénél ugyan ezt a '''routing-id'''-t adjuk majd meg, akkor a fenti képlet ugyan azt a shrad ID-t fogja visszaadni, tehát ugyan azzal a routing id-val mindig ugyan azt a shard id-t állítjuk elő!}}
}
</pre>
Láthatjuk benne a routing id-t a _routing mezőben. Persze a routing paraméter nélkül is kereshettünk volna, de akkor az összes shard-re el lett volna küldve a kérés.