[{"data":1,"prerenderedAt":740},["ShallowReactive",2],{"blog-incremental-indexing-cdc-hu":3},{"slug":4,"published":5,"updated":6,"minutes":7,"category":8,"tags":9,"keywords":15,"about":26,"sources":35,"cover":72,"og":73,"expertise":74,"locales":75,"lang":78,"title":79,"description":80,"coverAlt":81,"metaTitle":82,"takeaways":83,"faq":89,"toc":105,"blocks":133,"others":490},"incremental-indexing-cdc","2026-09-25","2026-10-17",8,"rag",[10,11,12,13,14],"RAG","Change data capture","PostgreSQL","Vector databases","Data freshness",[16,17,18,19,20,21,22,23,24,25],"incremental indexing for RAG","change data capture RAG","Debezium Postgres logical decoding","re-embedding cost","blue\u002Fgreen index swap vector database","index staleness monitoring","delete propagation vector index","permission changes RAG index","Qdrant aliases","high water mark change detection",[27,29,32],{"name":11,"url":28},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FChange_data_capture",{"name":30,"url":31},"Retrieval-augmented generation","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRetrieval-augmented_generation",{"name":33,"url":34},"Blue–green deployment","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FBlue%E2%80%93green_deployment",[36,39,42,45,48,51,54,57,60,63,66,69],{"title":37,"url":38},"PostgreSQL docs: logical decoding concepts","https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Flogicaldecoding-explanation.html",{"title":40,"url":41},"Debezium docs: PostgreSQL connector","https:\u002F\u002Fdebezium.io\u002Fdocumentation\u002Freference\u002Fstable\u002Fconnectors\u002Fpostgresql.html",{"title":43,"url":44},"PostgreSQL docs: CREATE PUBLICATION","https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fsql-createpublication.html",{"title":46,"url":47},"PostgreSQL docs: pg_replication_slots","https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fview-pg-replication-slots.html",{"title":49,"url":50},"Azure AI Search: changed and deleted blobs","https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fsearch\u002Fsearch-howto-index-changed-deleted-blobs",{"title":52,"url":53},"Azure AI Search: scheduling indexers","https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fsearch\u002Fsearch-howto-schedule-indexers",{"title":55,"url":56},"Qdrant docs: collections and aliases","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fconcepts\u002Fcollections\u002F",{"title":58,"url":59},"Elastic docs: aliases","https:\u002F\u002Fwww.elastic.co\u002Fdocs\u002Fmanage-data\u002Fdata-store\u002Faliases",{"title":61,"url":62},"pgvector on GitHub","https:\u002F\u002Fgithub.com\u002Fpgvector\u002Fpgvector",{"title":64,"url":65},"GDPR Article 17","https:\u002F\u002Fgdpr-info.eu\u002Fart-17-gdpr\u002F",{"title":67,"url":68},"OpenAI API pricing","https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fpricing",{"title":70,"url":71},"Voyage AI docs: pricing","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fpricing","\u002Fimages\u002Fblog\u002Fincremental-indexing-cdc\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fincremental-indexing-cdc\u002Fog.jpg","ai-engineer",[76,77,78],"en","de","hu","A RAG-index frissen tartása: növekményes indexelés, CDC és blue\u002Fgreen újrabeágyazás","A RAG-index frissen tartása: elavulási keret, változáskövetés, CDC Postgresből Debeziummal, törlések, jogosultságok, blue\u002Fgreen csere és költség.","Egy adatbázis változásokat továbbít egy szekrénybe, mellette egy második szekrény és egy kapcsoló.","A RAG-index frissen tartása · Balázs Csorba",[84,85,86,87,88],"Adjon minden forrásnak percekben megadott elavulási keretet, és ehhez mérje a késést; az „előbb-utóbb konzisztens” nem tesztelhető követelmény.","Sok forráshoz elég a vízszintjel és a tartalom-hash; a Postgresből logikai dekódolással és Debeziummal végzett CDC azokhoz a forrásokhoz való, ahol percek számítanak, a replikációs slotjait pedig felügyelni kell.","A törlések és a jogosultságváltozások azok a változások, amelyeket az indexelők elmulasztanak: az Azure AI Search dokumentációja szerint az indexelők nem követik a törléseket, a GDPR szerinti törlésnek pedig indokolatlan késedelem nélkül kell megtörténnie.","A modellváltás miatti újrabeágyazás egy alias mögötti új gyűjteménybe való, egyetlen API-hívással átkapcsolva és visszalépéshez megtartva; pgvectorban párhuzamosan építse az indexeket.","A token az olcsó rész: 100 millió token újrabeágyazása millió tokenenként 0,02 dolláron kb. 2 dollár; a valódi költség a fejlesztés, a visszatöltési idő és a helyesség.",[90,93,96,99,102],{"q":91,"a":92},"Hogyan tartsam naprakészen a RAG-indexet?","Kövesse, mely forrásrekordok változtak, vízszintjellel, tartalom-hash-sel vagy változásrögzítéssel (CDC), csak ezeket darabolja és ágyazza be újra, a törléseket és jogosultságváltozásokat kifejezetten továbbítsa, és futtasson rendszeres söprést, amely elkapja, amit az eseményút elmulasztott. A késést forrásonkénti elavulási kerethez mérje.",{"q":94,"a":95},"Mi a változásrögzítés (CDC) a RAG-ban?","A változások olvasása az adatbázis naplójából a táblák lekérdezgetése helyett. Postgresben a logikai dekódolás elérhetővé teszi a véglegesített beszúrásokat, módosításokat és törléseket, a Debezium pedig ezekből eseményeket készít, amelyeket egy indexelő másodperceken belül feldolgozhat. Replikációs slotok kellenek hozzá, amelyek a feldolgozásig megtartják a WAL-t, és felügyelni kell őket.",{"q":97,"a":98},"Hogyan jutnak el a törlések a vektorindexbe?","Csak ha elküldi őket. Sok indexelő nem követi a forrásbeli törléseket, ezért használjon CDC-ből származó törlési eseményeket, az indexelő által olvasott logikai törlésjelzőt, vagy rendszeres egyeztetést, amely eltávolítja azokat a darabokat, amelyek forrásazonosítója már nem létezik. A személyes adatokat a GDPR szerint indokolatlan késedelem nélkül törölni kell.",{"q":100,"a":101},"Hogyan ágyazzak be újra új modellel leállás nélkül?","Építsen új gyűjteményt az új modellel, miközben a régi kiszolgál, töltse fel, az új változásokat írja mindkettőbe, majd egyetlen hívással kapcsoljon át egy aliast az új gyűjteményre, a régit pedig tartsa meg csak olvashatóként a visszalépéshez. pgvectorban párhuzamosan hozza létre az új indexet, és konfigurációban váltson.",{"q":103,"a":104},"Mennyibe kerül egy korpusz újrabeágyazása?","2026 októberében millió tokenenként 0,02–0,13 dolláros beágyazási API-árakkal 100 millió token újrabeágyazása nagyjából 2–13 dollár. A valódi költség a visszatöltési idő, a sebességkorlátok, az átkapcsolás fejlesztése és a keresési minőség újraellenőrzése az új modellel.",[106,109,112,115,118,121,124,127,130],{"id":107,"title":108},"staleness-budget","Mit jelent a friss: elavulási keret",{"id":110,"title":111},"dirty-tracking","Változáskövetés vízszintjelekkel és hash-ekkel",{"id":113,"title":114},"cdc-from-postgres","Változásrögzítés Postgresből",{"id":116,"title":117},"deletes-and-permissions","Törlések és jogosultságváltozások",{"id":119,"title":120},"reindex-and-blue-green-swaps","Teljes újraindexelés és blue\u002Fgreen csere",{"id":122,"title":123},"cost-of-re-embedding","Az újrabeágyazás költsége",{"id":125,"title":126},"when-not-to-use-cdc","Mikor túlzás a CDC",{"id":128,"title":129},"checklist","Ellenőrzőlista egy naprakész indexhez",{"id":131,"title":132},"sources","Források",[134,143,152,155,158,161,162,175,183,186,187,202,208,223,225,244,245,255,261,268,269,279,283,293,313,314,341,344,347,348,355,420,421,438,451,452],{"type":135,"content":136},"paragraph",[137,138,142],"A ",{"tag":139,"children":140},"strong",[141],"növekményes indexelés RAG-hoz"," az a réteg, amely az első bejárás után is igaznak tartja az indexet: az új dokumentumokat feldarabolja és beágyazza, a módosultakat lecseréli, a törölteket eltávolítja, a jogosultságváltozások pedig eljutnak az indexbe, mielőtt valaki olyan dokumentumot látna, amelyet nem lenne szabad. A legtöbb RAG-prototípus kihagyja, mert az első bemutató egy statikus mappát használ. Az éles korpuszok egész nap változnak, és egy asszisztens, amely a múlt heti árlistát vagy egy visszavont szabályzatot idéz, rosszabb annál, amelyik bevallja, hogy nem tudja.",{"type":135,"content":144},[145,146,151],"Ez a cikk az elavulási keretről, a vízszintjelekkel és hash-ekkel végzett változáskövetésről, a Postgresből végzett változásrögzítésről (CDC), a törlésekről és jogosultságváltozásokról, a blue\u002Fgreen cserével végzett teljes újraindexelésről, az újrabeágyazás költségéről, és arról szól, mikor túlzás a CDC. A darabolást, a visszakeresést és az újrarangsorolást a ",{"tag":147,"to":148,"children":149},"link","\u002Fblog\u002Frag-pipeline-chunking-hybrid-search-reranking",[150],"RAG-folyamatok: darabolás, hibrid keresés és újrarangsorolás"," tárgyalja; a verziók és árak 2026 októberi állapotot tükröznek.",{"type":153,"level":154,"id":107,"text":108},"heading",2,{"type":135,"content":156},[157],"A friss forrásonként mért számot jelent, nem érzést. Írja le minden forrásra, hány perc alatt kell egy változásnak eljutnia az indexbe: talán öt a készletszintekhez, egy óra a termékleírásokhoz, egy nap az archivált kézikönyvekhez, és azonnal a visszavont hozzáférésekhez. Ezeket a számokat semmilyen szabvány nem írja elő; abból következnek, mibe kerül egy rossz válasz. Ezután mérje a tényleges késést a forrásbeli véglegesítéstől az indexbe írásig, és riasszon, ha átlépi a keretet.",{"type":135,"content":159},[160],"A keretből az is kiderül, milyen mechanizmus kell. A napi keretet egy éjszakai söprés teljesíti; az ötperces kerethez gyakori bejárás vagy események kellenek; a jogosultságokra vonatkozó másodperces keret általában azt jelenti, hogy a hozzáférést lekérdezéskor és az indexben is ellenőrizni kell. Az index felosztása segít. Spryker- és Pimcore-alapú katalógusokban az ár és a készlet egész nap változik, a hosszú leírások ritkán, így az illékony skalármezők metaadatként frissíthetők anélkül, hogy a mellettük lévő szöveget újra be kellene ágyazni.",{"type":153,"level":154,"id":110,"text":111},{"type":135,"content":163},[164,165,169,170,174],"A legtöbb forráshoz nem kell adatbázisnapló, csak megbízható módja annak, hogy kiderüljön, mi változott az utolsó futás óta. A vízszintjel a klasszikus minta: jegyezze meg a legnagyobb feldolgozott ",{"tag":166,"children":167},"code",[168],"updated_at"," értéket, és legközelebb az e fölötti sorokat kérje le. Az Azure AI Search újrahasznosítható változásészlelési szabályként nevezi meg, ütemezett indexelői pedig 5 percenként és 24 óránként között futhatnak (",{"tag":171,"href":53,"children":172},"a",[173],"Azure AI Search","). Használjon monoton növekvő oszlopot, tartson kis átfedési ablakot, és tegye idempotenssé az írásokat, mert az órák és a hosszú tranzakciók régebbi időbélyeggel véglegesülő sorokat hoznak létre.",{"type":135,"content":176},[177,178,182],"A tartalom-hash kiegészíti a vízszintjelet. A beágyazandó szöveget hash-elje, ne az egész sort, és hagyja ki az újrabeágyazást, ha a hash nem változott; így egy árfrissítés csak a metaadatot érinti. Ugyanez az ötlet kisebb léptékben fájlokra és repókra is működik, ahol fájlonként egy hash dönti el, mit kell újradarabolni, ahogy a ",{"tag":147,"to":179,"children":180},"\u002Fblog\u002Fcode-rag-repository-indexing",[181],"RAG kódon"," leírja. Mindkettő gyenge pontja a törlés: egy már nem létező sor sosem jelenik meg a módosult sorokra irányuló lekérdezésben.",{"type":135,"content":184},[185],"A söpréshez az elcsúszás elleni védelem is kell. Hetente egyszer vesse össze a forrásazonosítók teljes listáját az indexben lévő azonosítókkal: ami az indexben van, de a forrásban nincs, az elmulasztott törlés, ami a forrásban van, de az indexben nincs, az elmulasztott beszúrás. Ez az összevetés olcsó, minden más mechanizmus hibáit elkapja, és az eredménye egy szám, amely a késés mellé ugyanarra a műszerfalra kerülhet.",{"type":153,"level":154,"id":113,"text":114},{"type":135,"content":188},[189,190,192,193,196,197,201],"A változásrögzítés a táblák lekérdezgetése helyett az adatbázis write-ahead naplójából olvassa a véglegesített változásokat, így a beszúrások, módosítások és törlések egyaránt másodperceken belül eseményként érkeznek. Postgresben a mechanizmus a logikai dekódolás, „az adatbázis tábláin végzett összes tartós változás koherens, könnyen érthető formátumba történő kinyerése”, amely replikációs slotokra és egy kimeneti bővítményre épül (",{"tag":171,"href":38,"children":191},[12],"). Egy publikáció határozza meg, mely táblák tartoznak bele (",{"tag":171,"href":44,"children":194},[195],"CREATE PUBLICATION","), a sémaváltozásokat viszont nem replikálja, így a DDL külön feladat (",{"tag":171,"href":198,"children":199},"https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Flogical-replication-restrictions.html",[200],"korlátozások",").",{"type":203,"src":204,"alt":205,"wide":206,"caption":207},"image","\u002Fimages\u002Fblog\u002Fincremental-indexing-cdc\u002Fdiagram-11.webp","Eseményút a friss indexhez Öt lépés balról jobbra: egy változás véglegesül a Postgresben; a logikai dekódolás egy replikációs sloton keresztül elérhetővé teszi; a Debezium beszúrási, módosítási vagy törlési eseményt készít belőle; egy átalakító kiszűri a releváns mezőket, újradarabolja és beágyazza a módosult szöveget; az index pedig frissíti vagy törli az érintett darabokat. Egy updated_at szerinti ütemezett söprés elkapja, amit az eseményút elmulasztott, egy riasztás pedig a replikációs slot késését figyeli.",true,"Az eseményút másodpercek alatt szállítja a változásokat; egy lassabb söprés és egy késésriasztás gondoskodik róla, hogy semmi ne maradjon sokáig hibás.",{"type":135,"content":209},[210,211,214,215,218,219,222],"A feldolgozás szokásos módja a Debezium. A PostgreSQL-csatlakozójához ",{"tag":166,"children":212},[213],"wal_level=logical"," és elegendő WAL-küldő és replikációs slot kell, a dokumentációja pedig egyenesen fogalmaz a kockázatról: a replikációs slotok kiesés alatt is megtartanak minden WAL-t, amelyre a Debeziumnak szüksége van, ezért felügyelni kell őket, hogy elkerülje a lemez megtelését és a katalógus felfúvódását (",{"tag":171,"href":41,"children":216},[217],"Debezium","). A módosítási események csak ",{"tag":166,"children":220},[221],"REPLICA IDENTITY FULL"," mellett tartalmazzák az előző oszlopértékeket; egy heartbeat-intervallum akkor is mozgásban tartja a slotot, ha a rögzített táblák csendesek, egy jelzőtábla pedig teljes újraindexelés helyett célzott visszatöltést indít.",{"type":166,"code":224},"-- Postgres side of CDC: scope, slot health and lag\nALTER TABLE products REPLICA IDENTITY FULL;            -- update events carry old values too\nCREATE PUBLICATION rag_sources FOR TABLE products, product_texts, document_acl;\n\n-- WAL retained by each slot: alert long before the disk fills\nSELECT slot_name, active, wal_status,\n       pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), confirmed_flush_lsn)) AS behind\nFROM pg_replication_slots;",{"type":135,"content":226},[227,228,231,232,235,236,238,239,243],"A Postgres elérhetővé teszi a késésriasztáshoz szükséges számokat: a ",{"tag":166,"children":229},[230],"pg_replication_slots"," minden slotnál mutatja a megerősített pozíciót és a WAL-állapotot, a ",{"tag":166,"children":233},[234],"max_slot_wal_keep_size"," pedig korlátozza, mennyi WAL-t tarthat meg egy slot, mielőtt érvénytelenné válik (",{"tag":171,"href":47,"children":237},[12],"). A jelenlegi WAL-pozíció és a slot megerősített pozíciója közötti különbségre riasszon, jóval mielőtt eléri ezt a korlátot. A rendszerek között amúgy is áramló rendelési és katalógusadatokra ugyanazok az outbox- és idempotenciaminták érvényesek, lásd ",{"tag":147,"to":240,"children":241},"\u002Fblog\u002Fb2b-order-sync-erp",[242],"rendelésszinkron a webshop és az ERP között",".",{"type":153,"level":154,"id":116,"text":117},{"type":135,"content":246},[247,248,250,251,254],"A törlések és a jogosultságváltozások azok a változások, amelyeket az indexelők a leggyakrabban elmulasztanak, és éppen ennek a kettőnek vannak jogi következményei. Az Azure AI Search egyértelműen fogalmaz: az indexelő nem követi az objektumok törlését az adatforrásokban, ezért logikai törlési stratégia kell, és a szabályt a legelső indexelő futástól alkalmazni kell, különben a törölt dokumentumok az indexben maradnak (",{"tag":171,"href":50,"children":249},[173],"). A GDPR 17. cikke szerint a személyes adatokat indokolatlan késedelem nélkül törölni kell, ha a törlés esedékes (",{"tag":171,"href":65,"children":252},[253],"GDPR","), és az ilyen adatok darabjait tartalmazó vektorindex is ide tartozik.",{"type":135,"content":256},[257,258,201],"Mindkettőt kezelje kifejezetten. Minden darabon tárolja a forrás- és dokumentumazonosítót, hogy egy törlés egyetlen hívással eltávolíthassa egy dokumentum összes darabját; ahol van, dolgozza fel a CDC törlési eseményeit; és futtasson rendszeres egyeztetést, amely eltávolítja azokat a darabokat, amelyek forrása már nem létezik. A hozzáférés-szabályozáshoz a jogosultsági állapotot tartsa az indexben a szöveg és a vektorok mellett, a jogosultságváltozásokat pedig önálló eseményként továbbítsa. Az Azure AI Search ma már az indexben tárolja az ACL-metaadatokat, és 2026-ban a SharePoint-indexelőjéhez futásonkénti növekményes ACL-szinkront adott hozzá (",{"tag":171,"href":259,"children":260},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fsearch\u002Fwhats-new",[173],{"type":262,"variant":263,"title":264,"body":265},"callout","warn","A törölt dokumentum addig megválaszolható, amíg a darabjait nem törli",[266],[267],"Ha egy dokumentumot eltávolít a forrásrendszerből, azzal nem tűnik el a vektorindexből, az előtte lévő gyorsítótárból vagy bármely válasznaplóból. Tesztelje a törlést végig: töröljön egy ismert dokumentumot, majd tegyen fel az asszisztensnek olyan kérdést, amelyre csak az a dokumentum válaszolhat, és ellenőrizze, hogy a hivatkozás eltűnt.",{"type":153,"level":154,"id":119,"text":120},{"type":135,"content":270},[271,272,275,276,201],"Néhány változás nem alkalmazható növekményesen: egy új beágyazó modell, új darabolási stratégia vagy új indexkonfiguráció azt jelenti, hogy minden vektor megváltozik. Ezt kezelje migrációként, blue\u002Fgreen cserével. A Qdrant pontosan erre az esetre dokumentálja az aliasokat, a vektorverziók közötti váltásra „a neurális háló új verziójára való frissítéskor”, az aliasmódosításokat egyetlen műveleti kérésként küldve (",{"tag":171,"href":56,"children":273},[274],"Qdrant","); az Elasticsearch aliasai ugyanezt a célt szolgálják, és leállás nélküli újraindexelés módjaként dokumentáltak (",{"tag":171,"href":59,"children":277},[278],"Elastic",{"type":203,"src":280,"alt":281,"wide":206,"caption":282},"\u002Fimages\u002Fblog\u002Fincremental-indexing-cdc\u002Fdiagram-21.webp","A blue\u002Fgreen újrabeágyazás idővonala Négy fázis balról jobbra egy idővonalon. Építés: az új modellel létrejön a v2 gyűjtemény, miközben a v1 kiszolgálja a teljes forgalmat. Visszatöltés: a v2 feltöltődik a forrásból, az új változások mindkettőbe íródnak. Átkapcsolás: egyetlen aliashívás a v1-ről a v2-re irányítja az alkalmazást. Megtartás: a v1 visszalépéshez csak olvashatóként megmarad, majd törlődik. Alatta a pgvector-változat: az új index párhuzamos létrehozása, majd váltás az alkalmazás konfigurációjában.","A modellváltás migráció: építse mellé, töltse fel, egyetlen hívással kapcsoljon át, és tartsa meg a régi indexet, amíg az új nem bizonyított.",{"type":135,"content":284},[285,286,289,290,201],"A sorrend mindenhol ugyanaz: építse fel az új gyűjteményt az új modellel, miközben a régi kiszolgál, töltse fel a forrásból, a visszatöltés alatt az új változásokat írja mindkettőbe, kapcsolja át az aliast, és a régi gyűjteményt tartsa meg csak olvashatóként, amíg az új élesben át nem megy a visszakeresési kiértékelésén. A dokumentáció az aliashívást írja le, nem a terhelés alatti tranzakciós garanciáit, ezért az átkapcsolást előbb egy tesztkörnyezeti másolaton próbálja ki. pgvectorban ennek megfelelője egy új oszlop vagy tábla, egy ",{"tag":166,"children":287},[288],"CREATE INDEX CONCURRENTLY"," paranccsal épített index, hogy az írások ne blokkolódjanak, és váltás az alkalmazás konfigurációjában (",{"tag":171,"href":62,"children":291},[292],"pgvector",{"type":135,"content":294},[295,296,299,300,303,304,307,308,312],"A pgvector két gyakorlati megjegyzést tesz: az indexépítés jóval gyorsabb, ha a HNSW-gráf befér a ",{"tag":166,"children":297},[298],"maintenance_work_mem"," keretbe, és az ",{"tag":166,"children":301},[302],"m = 16",", valamint az ",{"tag":166,"children":305},[306],"ef_construction = 64"," alapértékek észszerű kezdést jelentenek az új indexhez. A célmodell kiválasztása külön döntés, ezt a ",{"tag":147,"to":309,"children":310},"\u002Fblog\u002Fembedding-model-selection-2026",[311],"beágyazó modell kiválasztásáról"," szóló cikk tárgyalja.",{"type":153,"level":154,"id":122,"text":123},{"type":135,"content":315},[316,317,320,321,324,325,328,329,332,333,336,337,340],"A token az olcsó rész. 2026 októberében az OpenAI a ",{"tag":166,"children":318},[319],"text-embedding-3-small"," modellt millió tokenenként 0,02, a ",{"tag":166,"children":322},[323],"text-embedding-3-large"," modellt 0,13 dollárért kínálja (",{"tag":171,"href":68,"children":326},[327],"OpenAI","), a Voyage a ",{"tag":166,"children":330},[331],"voyage-4-lite","-ot 0,02, a ",{"tag":166,"children":334},[335],"voyage-4","-et 0,06 dollárért millió tokenenként, kötegelt kedvezménnyel (",{"tag":171,"href":71,"children":338},[339],"Voyage","). Egy 100 millió tokenes korpusz újrabeágyazása így nagyjából 2–13 dollár API-díj. Ez listaárakkal végzett számítás, nem árajánlat, és minden máshoz képest csekély.",{"type":135,"content":342},[343],"A valódi költségek máshol vannak: órákig tartó visszatöltés sebességkorlátok mellett, egy kettős írási ablak, amelynek helyesnek kell lennie, többlettárhely, amíg két index létezik, és egy visszakeresési kiértékelés az új modellel az átkapcsolás előtt. A saját Nuxt-oldalamon, ahol LLM-funkciókat futtatok egy kis korpuszon, mindent újra beágyazni triviális, és éppen ezért nem a tokenszámla az ok a CDC megépítésére; hanem a frissesség, a törlések és a jogosultságok.",{"type":135,"content":345},[346],"Teljes újrabeágyazás előtt egy rövidítést érdemes megvizsgálni. Egyes szolgáltatók olyan modellcsaládokat írnak le, amelyek tagjai közös beágyazási teret használnak, ami lehetővé tenné, hogy először a lekérdezési oldalt frissítse; mielőtt erre támaszkodna, ellenőrizze az ilyen állítást a szolgáltató saját dokumentációjában és a kiértékelő készletével, mert az összeférhetetlen modellek vektorainak keverése észrevétlenül rontja a visszakeresést.",{"type":153,"level":154,"id":125,"text":126},{"type":135,"content":349},[350,351,201],"A CDC túlzás, ha az elavulási keret órák vagy egy nap, ha a forrás egy SaaS-rendszer adatbázis-hozzáférés nélkül, vagy ha a csapatban senki sem fogja figyelni a replikációs slotokat. Egy éjszakai vagy óránkénti söprés vízszintjelekkel, tartalom-hash-ekkel és törlési egyeztetéssel egyszerűbb, könnyebben átlátható, és a legtöbb dokumentumgyűjteményhez elég. SaaS-forrásoknál a webhookok jelentik az eseményutat: ellenőrizzen egy titkot, 10 másodpercen belül válaszoljon, ellenőrizze az esemény típusát, kérje újra az elmaradt kézbesítéseket, és a kézbesítési azonosító alapján deduplikáljon, ahogy a GitHub útmutatója leírja (",{"tag":171,"href":352,"children":353},"https:\u002F\u002Fdocs.github.com\u002Fen\u002Fwebhooks\u002Fusing-webhooks\u002Fbest-practices-for-using-webhooks",[354],"GitHub",{"type":356,"head":357,"rows":368},"table",[358,360,362,364,366],[359],"Mechanizmus",[361],"Jellemző elavulás",[363],"Észleli a törlést",[365],"Észleli a jogosultságváltozást",[367],"Üzemeltetési teher",[369,379,390,400,411],[370,372,374,376,377],[371],"Éjszakai teljes újraindexelés",[373],"akár egy nap",[375],"igen, újraépítéssel",[375],[378],"alacsony, de nagy méretnél drága",[380,382,384,386,388],[381],"updated_at söprés",[383],"perctől óráig",[385],"nem, egyeztetés kell",[387],"csak ha az ACL-sorokon van időbélyeg",[389],"alacsony",[391,393,395,397,399],[392],"Tartalom-hash összevetés",[394],"futásonként",[396],"igen, ha a teljes listát összeveti",[398],"nem",[389],[401,403,405,407,409],[402],"CDC logikai dekódolással",[404],"másodpercek",[406],"igen, törlési események",[408],"igen, ha az ACL-táblák publikáltak",[410],"magas: slotok, késés, séma",[412,414,415,417,418],[413],"Bejövő webhookok",[404],[416],"ha a forrás küldi",[416],[419],"közepes: újrapróbálás, dedup",{"type":153,"level":154,"id":128,"text":129},{"type":422,"ordered":206,"items":423},"list",[424,426,428,430,432,434,436],[425],"Forrásonként határozzon meg elavulási keretet, és ehhez mérje a késést.",[427],"Minden darabon tárolja a forrásazonosítót, a dokumentumazonosítót, a tartalom-hash-t és a jogosultságokat.",[429],"Csak akkor ágyazzon be újra, ha a beágyazott szöveg változott; egyébként a metaadatot frissítse.",[431],"A törléseket és jogosultságváltozásokat kifejezetten továbbítsa, és a törlést végig tesztelje.",[433],"CDC esetén riasszon a replikációs slotok késésére és a megtartott WAL-ra.",[435],"Tartson rendszeres söprést, amely elkapja, amit az események elmulasztottak.",[437],"A modellváltást alias mögötti blue\u002Fgreen migrációként végezze, visszalépési lehetőséggel.",{"type":135,"content":439},[440,441,445,446,450],"Ha a RAG-rendszerének helyesnek kell maradnia, miközben a mögöttes adatok egész nap változnak, nézze meg a ",{"tag":147,"to":442,"children":443},"\u002Fexpertise\u002Fai-engineer",[444],"MI-mérnöki munkámat",". Ugyanennek a problémának a termékadat-oldalát ",{"tag":147,"to":447,"children":448},"\u002Fblog\u002Fpimcore-erp-delta-sync",[449],"a Pimcore ERP delta szinkron"," tárgyalja.",{"type":153,"level":154,"id":131,"text":132},{"type":422,"ordered":206,"items":453},[454,457,460,463,466,469,472,475,478,481,484,487],[455],{"tag":171,"href":38,"children":456},[37],[458],{"tag":171,"href":41,"children":459},[40],[461],{"tag":171,"href":44,"children":462},[43],[464],{"tag":171,"href":47,"children":465},[46],[467],{"tag":171,"href":50,"children":468},[49],[470],{"tag":171,"href":53,"children":471},[52],[473],{"tag":171,"href":56,"children":474},[55],[476],{"tag":171,"href":59,"children":477},[58],[479],{"tag":171,"href":62,"children":480},[61],[482],{"tag":171,"href":65,"children":483},[64],[485],{"tag":171,"href":68,"children":486},[67],[488],{"tag":171,"href":71,"children":489},[70],[491,564,622,679],{"slug":492,"published":6,"minutes":493,"category":8,"tags":494,"keywords":499,"about":512,"sources":522,"cover":558,"og":559,"expertise":74,"locales":560,"lang":78,"title":561,"description":562,"coverAlt":563},"embedding-model-selection-2026",9,[495,10,496,497,498],"Embeddings","MTEB","Vector search","Model selection",[500,501,502,503,504,505,506,507,508,509,510,511],"best embedding model 2026","how to choose an embedding model","embedding model comparison","MTEB leaderboard explained","RTEB benchmark","open source embedding model","multilingual embedding model","voyage-4 vs openai embeddings","Qwen3-Embedding","EmbeddingGemma","embedding model for RAG","switching embedding models re-embed",[513,516,519],{"name":514,"url":515},"Word embedding","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWord_embedding",{"name":517,"url":518},"Information retrieval","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FInformation_retrieval",{"name":520,"url":521},"Discounted cumulative gain","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FDiscounted_cumulative_gain",[523,526,529,532,535,538,541,543,546,549,552,555],{"title":524,"url":525},"Enevoldsen et al.: MMTEB, Massive Multilingual Text Embedding Benchmark (2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2502.13595",{"title":527,"url":528},"Hugging Face: Introducing RTEB, a new standard for retrieval evaluation (Oct 2025)","https:\u002F\u002Fhuggingface.co\u002Fblog\u002Frteb",{"title":530,"url":531},"OpenAI: Vector embeddings guide","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fembeddings",{"title":533,"url":534},"OpenAI: API pricing","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fpricing",{"title":536,"url":537},"Voyage AI: The Voyage 4 model family, shared embedding space with MoE architecture (Jan 2026)","https:\u002F\u002Fblog.voyageai.com\u002F2026\u002F01\u002F15\u002Fvoyage-4\u002F",{"title":539,"url":540},"Voyage AI: Text embeddings documentation","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fembeddings",{"title":542,"url":71},"Voyage AI: Pricing",{"title":544,"url":545},"Google: Gemini API embeddings documentation","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fembeddings",{"title":547,"url":548},"Google: Gemini API pricing","https:\u002F\u002Fai.google.dev\u002Fgemini-api\u002Fdocs\u002Fpricing",{"title":550,"url":551},"Cohere: Embed models documentation","https:\u002F\u002Fdocs.cohere.com\u002Fdocs\u002Fcohere-embed",{"title":553,"url":554},"Qwen: Qwen3-Embedding-8B model card","https:\u002F\u002Fhuggingface.co\u002FQwen\u002FQwen3-Embedding-8B",{"title":556,"url":557},"Google Developers Blog: Introducing EmbeddingGemma (Sep 2025)","https:\u002F\u002Fdevelopers.googleblog.com\u002Fen\u002Fintroducing-embeddinggemma\u002F","\u002Fimages\u002Fblog\u002Fembedding-model-selection-2026\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fembedding-model-selection-2026\u002Fog.jpg",[76,77,78],"Embedding-modell választása 2026-ban: ranglisták, költségek és összehasonlító teszt a saját adatokon","Hogyan válassz embedding-modellt RAG-hoz 2026-ban: mit mond az MTEB és az RTEB, API vagy nyílt súlyok, árak, dimenziók és egy egyhetes összehasonlító teszt.","Három oszlop egymásra rakott kockákból, középen a legmagasabb, mindegyik rövid sávval mérve.",{"slug":565,"published":6,"minutes":566,"category":8,"tags":567,"keywords":571,"about":583,"sources":591,"cover":616,"og":617,"expertise":74,"locales":618,"lang":78,"title":619,"description":620,"coverAlt":621},"contextual-retrieval-late-chunking",10,[10,568,495,569,570],"Chunking","Contextual retrieval","Late chunking",[572,573,574,575,576,577,578,579,580,581,582],"contextual retrieval","anthropic contextual retrieval","late chunking","contextual chunk embeddings","contextual embeddings rag","contextual bm25","chunk context rag","voyage-context-3","voyage-context-4","late chunking vs contextual retrieval","rag chunking context loss",[584,585,588],{"name":30,"url":31},{"name":586,"url":587},"Okapi BM25","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOkapi_BM25",{"name":589,"url":590},"Sentence embedding","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSentence_embedding",[592,595,598,601,604,607,610,613],{"title":593,"url":594},"Anthropic: Introducing Contextual Retrieval (Sep 2024)","https:\u002F\u002Fwww.anthropic.com\u002Fnews\u002Fcontextual-retrieval",{"title":596,"url":597},"Günther et al.: Late Chunking, Contextual Chunk Embeddings Using Long-Context Embedding Models (2024, rev. 2025)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2409.04701",{"title":599,"url":600},"Jina AI: Late Chunking in Long-Context Embedding Models (Aug 2024)","https:\u002F\u002Fjina.ai\u002Fnews\u002Flate-chunking-in-long-context-embedding-models\u002F",{"title":602,"url":603},"Voyage AI: Introducing voyage-context-3 (Jul 2025)","https:\u002F\u002Fblog.voyageai.com\u002F2025\u002F07\u002F23\u002Fvoyage-context-3\u002F",{"title":605,"url":606},"Voyage AI: voyage-context-4 (Jun 2026)","https:\u002F\u002Fblog.voyageai.com\u002F2026\u002F06\u002F29\u002Fvoyage-context-4\u002F",{"title":608,"url":609},"Voyage AI: Contextualized chunk embeddings documentation","https:\u002F\u002Fdocs.voyageai.com\u002Fdocs\u002Fcontextualized-chunk-embeddings",{"title":611,"url":612},"Anthropic: Claude API pricing","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fabout-claude\u002Fpricing",{"title":614,"url":615},"Qu, Tu and Bao: Is Semantic Chunking Worth the Computational Cost? (2024)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2410.13070","\u002Fimages\u002Fblog\u002Fcontextual-retrieval-late-chunking\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fcontextual-retrieval-late-chunking\u002Fog.jpg",[76,77,78],"Kontextuális visszakeresés és késleltetett chunkolás: a RAG-chunkok visszakapják a kontextusukat","A chunkok elveszítik a dokumentumukat. Hogyan javít ezen a contextual retrieval, a late chunking és a kontextusos embedding, mennyibe kerül, és mikor hagyd ki.","Négy szabad négyzet, alul széles kapocs fogja össze, mindegyik felfelé egy nagy laphoz kapcsolódik.",{"slug":623,"published":6,"minutes":493,"category":8,"tags":624,"keywords":628,"about":641,"sources":649,"cover":673,"og":674,"expertise":74,"locales":675,"lang":78,"title":676,"description":677,"coverAlt":678},"rag-access-control-permissions",[10,625,626,627,497],"Access control","Security","Multi-tenancy",[629,630,631,632,633,634,635,636,637,638,639,640],"rag access control","permission aware rag","document level security rag","rag multi tenancy","vector database access control","pgvector row level security","security trimming azure ai search","openfga rag authorization","qdrant multitenancy","pinecone namespaces multitenancy","owasp llm08 vector and embedding weaknesses","rag data leakage",[642,645,648],{"name":643,"url":644},"Access-control list","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAccess-control_list",{"name":646,"url":647},"Multitenancy","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMultitenancy",{"name":30,"url":31},[650,653,656,658,661,664,667,670],{"title":651,"url":652},"OWASP GenAI Security Project: LLM08:2025 Vector and Embedding Weaknesses","https:\u002F\u002Fgenai.owasp.org\u002Fllmrisk\u002Fllm082025-vector-and-embedding-weaknesses\u002F",{"title":654,"url":655},"PostgreSQL documentation: Row Security Policies","https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fddl-rowsecurity.html",{"title":657,"url":62},"pgvector README: filtering and iterative index scans",{"title":659,"url":660},"Qdrant: Multitenancy and partitions guide","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fguides\u002Fmultiple-partitions\u002F",{"title":662,"url":663},"Pinecone: Implement multitenancy using namespaces","https:\u002F\u002Fdocs.pinecone.io\u002Fguides\u002Findex-data\u002Fimplement-multitenancy",{"title":665,"url":666},"Microsoft Learn: Document-level access control in Azure AI Search","https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fazure\u002Fsearch\u002Fsearch-document-level-access-overview",{"title":668,"url":669},"OpenFGA: RAG authorization use case","https:\u002F\u002Fopenfga.dev\u002Fdocs\u002Fuse-cases\u002Frag-authorization",{"title":671,"url":672},"Morris et al.: Text Embeddings Reveal (Almost) As Much As Text (EMNLP 2023)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2310.06816","\u002Fimages\u002Fblog\u002Frag-access-control-permissions\u002Fcover.webp","\u002Fimages\u002Fblog\u002Frag-access-control-permissions\u002Fog.jpg",[76,77,78],"Hozzáférés-kezelés RAG-hoz: jogosultságtudatos visszakeresés dokumentumszivárgás nélkül","Hogyan szivárogtatnak dokumentumot a RAG-asszisztensek, és hogyan állítsd meg: ACL minden chunkon, előszűrés, sorszintű biztonság pgvectorban, jogszinkron.","Hét kártya sorban, haton lakat jelvény, a csupasz kártya nyilat küld kifelé.",{"slug":680,"published":6,"minutes":566,"category":8,"tags":681,"keywords":686,"about":698,"sources":706,"cover":733,"og":734,"expertise":735,"locales":736,"lang":78,"title":737,"description":738,"coverAlt":739},"rag-product-catalog-pim-data",[10,682,683,684,685],"PIM","Product data","B2B e-commerce","Metadata filtering",[687,688,689,690,691,692,693,694,695,696,697],"rag product catalog","rag pim data","llm product data","product catalog chatbot","akeneo rag","pimcore ai search","rag structured data","metadata filtering rag","product attributes embeddings","b2b product assistant","etim classification ai",[699,702,703],{"name":700,"url":701},"Product information management","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FProduct_information_management",{"name":30,"url":31},{"name":704,"url":705},"ETIM (standard)","https:\u002F\u002Fwww.etim-international.com\u002Fclassification\u002F",[707,710,713,716,718,721,724,727,730],{"title":708,"url":709},"Akeneo API: Products, product values, metric values and product models","https:\u002F\u002Fapi.akeneo.com\u002Fconcepts\u002Fproducts.html",{"title":711,"url":712},"Akeneo Help Center: What about products with variants?","https:\u002F\u002Fhelp.akeneo.com\u002Fserenity-take-the-power-over-your-products\u002Fserenity-what-about-products-with-variants",{"title":714,"url":715},"Pimcore documentation: Classification Store","https:\u002F\u002Fdocs.pimcore.com\u002Fplatform\u002FPimcore\u002FObjects\u002FObject_Classes\u002FData_Types\u002FClassification_Store\u002F",{"title":717,"url":705},"ETIM International: Classification",{"title":719,"url":720},"ETIM International: ETIM releases and the IXF format","https:\u002F\u002Fetim-international.com\u002F?p=754",{"title":722,"url":723},"Reddy et al.: Shopping Queries Dataset, a large-scale ESCI benchmark for improving product search (2022)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2206.06588",{"title":725,"url":726},"Amazon Science: esci-data repository","https:\u002F\u002Fgithub.com\u002Famazon-science\u002Fesci-data",{"title":728,"url":729},"Qdrant documentation: Filtering","https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fconcepts\u002Ffiltering\u002F",{"title":731,"url":732},"Sui et al.: Table Meets LLM, can large language models understand structured table data? (WSDM 2024)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2305.13062","\u002Fimages\u002Fblog\u002Frag-product-catalog-pim-data\u002Fcover.webp","\u002Fimages\u002Fblog\u002Frag-product-catalog-pim-data\u002Fog.jpg","b2b-ecommerce-developer",[76,77,78],"RAG termékkatalógusra: PIM-adatokból megbízható válaszok","A termékadat strukturált, ezért a PDF-szerű chunkolás itt elbukik. Hogyan sorosítsd a PIM-attribútumokat, és hogyan küldd a specifikációs kérdéseket szűrőkhöz.","Kilenc négyzetből álló keret apró jelekkel, alatta tölcsér egyetlen kártyához.",1792342717182]