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

Elasticsearch: egyedi rekordokat ad vissza több indexben

Megpróbálok egyedi rekordokat visszaadni több indexben.

Tegyük fel, hogy két indexem van, indexA és indexB. Az elaszticsearch mindkét indexet lekérdezi.

Ha a "Típus" mezőnév alapján szűrök (ez mindkét indexben van), hogyan kaphatnám meg csak az egyedieket?

Példa: Az indexA rekordja "típus" oszloppal rendelkezik "alpha" értékű, és az indexB rekordja "type" oszloppal és "alpha" értékű. Az elasztikus keresési lekérdezésemnek csak egy ilyen rekordot kell kiadnia (nem számít, hogy melyiket).

Eddig ez van nálam:

searchParams = {
                "body": {
                    "size": searchService.PAGE_SIZE,
                    "from": searchService.currentPage * searchService.PAGE_SIZE,
                    "query": {
                        "bool": {
                            "must": must
                        }
                    },
                    "aggs": {
                        "unique_type": {
                            "terms": {
                                "field": "type",
                                "size": 1
                            }
                        }
                    }
                }
            };

De nem működik.

Kösz!

20.04.2020

  • Adna hozzá néhány példadokumentumot és a lekérdezés várható kimenetét? Ez segít a lekérdezésben. 20.04.2020
  • Szia @Nikolaj Vasziljev! Tegyük fel, hogy az első gyűjteményben van rekord: {név: paul, zászló: érvényes, típus:A}, a második gyűjteményben pedig: {név:steve, zászló:invalid, típus:A} A rugalmas keresési lekérdezés mindkettőt lekérdezné ezekből a gyűjteményekből (indexekből), és ha az összes egyedi A-típust akarom, akkor csak egy ilyen rekordot adna vissza (nem számít, hogy melyiket). Kösz! 23.04.2020
  • Ok, azt hiszem, tudom, hogyan segíthetek, kérem, nézze meg az általam közzétett választ, és ne felejtse el elfogadni és pozitívan szavazni, ha hasznosnak találja! Kérem, jelezze, ha problémái vannak a lekérdezésekkel. Sajnálom, hogy nem adtam meg a másoláshoz és beillesztéshez szükséges kódot, mert ez nem az én napom. 23.04.2020
  • Köszönöm @NikolayVasilievm remélem jobban telik a heted 29.04.2020

Válaszok:


1

A lekérdezésnek csak egy kis módosításra van szüksége: módosítsa a size paraméter értékét.

Hogyan adhatom vissza a kulcsszótípusok N leggyakoribb értékét több indexben?

Ehhez használhatja a terms összesítést. A terms összesítésben a size paraméter korlátozza a visszaküldendő gyűjtők számát. Az Ön esetében 1-re állította be, és ez az összesítés csak 1 gyűjtőt ad vissza.

Állítsa be a méretet 10-re vagy más megfelelő mennyiségre. Ez a mező N leggyakoribb értékét adja vissza (az Ön esetében type).

Egyébként az összes Elasticsearch keresés elvégezhető több indexen egyidejűleg.

Mi a teendő, ha egy-egy mintadokumentumot is szeretnék minden egyes gyűjtőhelyre?

A gyűjtőcsoportok egyedi értékeket gyűjtenek adott fajtájú, úgynevezett vödör, és számolja meg, hány dokumentum van a vödörben.

Az összesítések bizonyos statisztikákat ad vissza, például AVG() és SUM() do SQL-ben, a teljes eredménykészleten. Ezek egyedi számok, nem dokumentumok. Az Ön esetében az Elasticsearch először azokra a dokumentumokra korlátozza a dokumentumkészletet, amelyek csak az Ön által megadott must lekérdezésnek felelnek meg, majd kiszámítja az adott dokumentumkészlet összes összesítését.

Van mód arra kérni az Elasticsearch-et, hogy térjen vissza ezekből az összesítési eredményekből, és szerezzen be „legnagyobb találatot” minden egyes csoporthoz? Van, és a neve: top_hits összesítés. A te esetedben egy ilyen top_hits aggregáció a terms egybe kerül.

Mind a terms, mind a top_hits aggregációnak megvannak a maga korlátai, például nem tudják visszaadni az összes vödröt, ha túl sok, vagy az összes egyező dokumentumot, mivel az Elasticsearch igyekszik a lehető leggyorsabb lenni. Kérjük, ellenőrizze a megfelelő dokumentációs oldalakat.

Mi a teendő, ha szükségem van egy mező összes egyedi értékének teljes listájára?

Ebben az esetben használhatja a összetett összesítés és lapozás a gyűjtőkön, mint ahogyan már lapozást végez a keresési eredmények között (a size és from karakterekkel).


Remélem ez segít!

23.04.2020
Ú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..