WebHU - Programozási kérdések és válaszok

Egyéni tömeges indexelő a searchkickhez: a leképezési beállítások figyelmen kívül maradnak

Searchkick 3.1.0-t használok

Tömegesen indexelnem kell egy bizonyos rekordgyűjteményt. A dokumentumokban olvasottak és kipróbálások alapján nem tudok előre meghatározott azonosítószámot átadni a Searchkick újraindexelési metódusának. Aszinkron módot használok.

Ha például a Klass.reindex(async: true), akkor sorba állítja a feladatokat a beállításokban megadott batch_size értékkel. Az a probléma, hogy a teljes modell azonosítóját végighurcolja, majd meghatározza, hogy indexelni kell-e őket. Például, ha 10 000 rekord van az adatbázisomban, és a kötegméret 200, akkor 50 feladatot helyez sorba. Ezután minden azonosítóra ciklust fog végezni, és ha a search_import feltételei teljesülnek, indexeli azokat.

Ez a lépés haszontalan, szeretném sorba helyezni az azonosítók előre szűrt tömbjét, hogy megakadályozzam a teljes rekordon való hurkolást.

Megpróbáltam megírni a következő feladatot, hogy felülírjam a normál viselkedést:

def perform(class_name, batch_size = 100, offset = 0)
    model = class_name.constantize
    ids = model
          .joins(:user)
          .where(user: { active: true, id: $rollout.get(:searchkick).users })
          .where("#{class_name.downcase.pluralize}.id > ?", offset)
          .pluck(:id)

    until ids.empty?
      ids_to_enqueue = ids.shift(batch_size)
      Searchkick::BulkReindexJob.perform_later(
          class_name: model.name,
          record_ids: ids_to_enqueue
      )
end

A probléma: A keresési leképezési beállításokat a rendszer teljesen figyelmen kívül hagyja, amikor rekordokat szúr be az ElasticSearch-be, és nem tudok rájönni, hogy miért. Nem veszi fel a megadott egyezést (text_middle), és nem hoz létre hozzárendelést az alapértelmezett "kulcsszó" egyezéssel.

Van valami tiszta módszer a rekordok tömeges újraindexelésére anélkül, hogy sorba kellene helyezni a nem kívánt rekordokat tartalmazó feladatokat?


Válaszok:


1

Képesnek kell lennie a rekordok újraindexelésére egy feltétel alapján:

A searchkick dokumentumokból:

Reindex multiple records

Product.where(store_id: 1).reindex

Ezt belehelyezheti a saját késleltetett munkájába.

Amit megtettem, hogy néhány kötegelt műveletünknél, amelyek már egy késleltetett jobnál előfordulnak, becsomagoltam a kódot a jobban a tömeges blokkba, a searchkick doc-ba is.

Searchkick.callbacks(:bulk) do
... // wrap some batch operations on model instrumented with searchkick.
    // the bulk block should be outside of any transaction block
end
22.02.2019
Új anyagok

A rádiógomb ellenőrzött eseményének használata a jQueryben
Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

Miért érdemes elkezdeni a kódolást 2023-ban?
01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

🎙 Random Noise #2  – Örökbefogadás és hit
az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..