Haku gatheringId:n perusteella?

Tein ohjelman, joka listaa annetun lajin seurassa tavatut lajit. Ohjelma hakee ensin kaikki sellaiset dokumentit, joista löytyy tutkittava laji:

    .get('https://api.laji.fi/v0/warehouse/query/list' )
    .query({
    taxonId: speciesId,
    sourceId: settings.sources,
    countryId: settings.country,        
    selected: 'document.documentId',   
    pageSize: pageSize,   
    access_token: settings.lajifi_accessToken })

Sen jälkeen ohjelma lukee dokumentit yksi kerrallaan, ja tutkii niihin sisältyvät gathering-elementit. Tämä menettely on osoittautunut hieman liian hitaaksi tavaksi seuralaislajien hakemiseen. Nopeampi tapa voisi olla se, että documentId:n sijaan ohjelma hakisi suoraan lajin havaintoja vastaavat gatheringId-arvot:

    .get('https://api.laji.fi/v0/warehouse/query/list' )
    .query({
    taxonId: speciesId,
    sourceId: settings.sources,
    countryId: settings.country,        
    selected: 'gathering.gatheringId',   
    pageSize: pageSize,   
    access_token: settings.lajifi_accessToken })

Tämä on kyllä mahdollista, mutta API:ssa ei näyttäisi olevan keinoa hakea gathering-elementtejä suoraan gatheringId-arvon perusteella. Tämä mahdollisuus nopeuttaisi huomattavasti annetun lajin seuralaislajien selvittämistä.

Pistin gatheringId filterin. Tulee ensi päivityksessä mukaan (pari päivää)

1 tykkäys

Kiitos, nyt toimii. Haku ei vain ole vieläkään tarpeeksi nopeaa, että tulokset voisi laittaa dynaamisesti lajisivulle :neutral_face:

Pääsääntöisesti /aggregate kyselyt ovat huomattavasti nopeampi kuin /list kyselyt. Tämä juontaa hakujen taustalla olevan Vertica tietovaraston suunnitteluperiaatteista.

Jos kerrot hiukan tarkemmin, mitä haluat, voisin kokeilla keksiä sopivat kyselyt

Tällaista ohjelmaa olen kokeillut:

https://pastebin.com/9bTDFCEN

Aggregate-tyyppinen gathering-haku näyttäisi toimivan noin puolet nopeammin kuin list-haku. Sekään ei tosin riitä www-sivua varten, koska jo 100 gathering-hakua vie aikaa noin minuutin.

function getGathering( query )
{
    return request
    .get('https://api.laji.fi/v0/warehouse/query/aggregate' )
    .query({
        gatheringId: query.gatheringId,        
        aggregateBy: 'unit.linkings.taxon.scientificName',
        sourceId: settings.sources,
        countryId: settings.country, 
        pageSize: pageSize,        
        access_token: settings.lajifi_accessToken })
    .then( res => 
    {
        return res.body.results        
    })
}

gatheringId filteriin voi antaa pilkulla eroteltuna useita id:tä.

Käytännön limit sille kuinka monta niitä voi olla yhdessä pyynnössä on HTTP GET pyynnön headerin kokoraja. (Meillä on jossakin työlistan pohjalla mahdollisuus tehdä POST-pyyntöjä hakurajapintaan, joissa ei ole pyynnön osoitteen pituudelle rajaa)

Jos pistät aggregateBy: gathering.gatheringId,unit.linkings.taxon.scientificName niin saat ulos luettelon, jolla voi liittää tulokset haluttuun keruutapahtumaan

Olisipa ihanaa saada (takaisin) tuollainen näkymä, jossa on olennaisimmat lajit esiintymiskuviosta Suomessa. Hynöteistietokannan fenologiadiagrammia kaipaan viikottain ja viimeisen havainnon vuoden mukaan värikoodattu kartta on myös erittäin kätevä.

http://insects.ddns.net/#speciesbrowser:Diptera

Sorry, palvelu näkyi olleen pois päältä…