Hi Scott,

if I understand you correctly you should be able to request a download with a filter like this one that uses a primary AND nested with some ORs:

"predicate": {
        "type": "and",
        "predicates": [
            {
                "type": "or",
                "predicates": [
                    {
                        "type": "equals",
                        "key": "TAXON_KEY",
                        "value": "2475470"
                    },
                    {
                        "type": "equals",
                        "key": "TAXON_KEY",
                        "value": "2475471"
                    },
                    {
                        "type": "equals",
                        "key": "TAXON_KEY",
                        "value": "2475472"
                    }
                ]
            },
            {
                "type": "or",
                "predicates": [
                    {
                        "type": "equals",
                        "key": "BASIS_OF_RECORD",
                        "value": "PRESERVED_SPECIMEN"
                    },
                    {
                        "type": "equals",
                        "key": "FOSSIL_SPECIMEN",
                        "value": "2475471"
                    }
                ]
            },
            {
                "type": "equals",
                "key": "HAS_COORDINATE",
                "value": "true"
            },
            {
                "type": "equals",
                "key": "HAS_GEOSPATIAL_ISSUE",
                "value": "false"
            },
            {
                "type": "greaterThanOrEquals",
                "key": "YEAR",
                "value": "1949"
            },
            {
                "type": "lessThanOrEquals",
                "key": "YEAR",
                "value": "2011"
            },
            {
                "type": "greaterThanOrEquals",
                "key": "MONTH",
                "value": "3"
            },
            {
                "type": "lessThanOrEquals",
                "key": "MONTH",
                "value": "8"
            }
        ]
    }

Best,
Markus


On 13 Jan 2017, at 21:35, Scott Chamberlain <myrmecocystus@gmail.com> wrote:

Hi! 

A rgbif user is asking me about a particular download query, see https://github.com/ropensci/rgbif/issues/245 

TLDR: AFAICT this can't work as the API is set up right now. Or am I wrong?  

That is, he wants to get data for records that match

- 10 taxa with their taxonKey value
- 3 different basisofrecord values
- country = US 
- hasCoordinate = TRUE
- hasGeospatialIssue = FALSE
- year range between 1949 and 2011
- month range between 3 and 8

For the taxonKey values, I think he needs to combine those with OR operator:

"predicate": {
        "type": "or",
        "predicates": [
            {
                "type": "equals",
                "key": "TAXON_KEY",
                "value": "2475470"
            },
            {
                "type": "equals",
                "key": "TAXON_KEY",
                "value": "2475470"
            }
        ]
    }

However, he should combine the other parameters (basisofrecord, hasCoordinate, year, month, etc) using AND AFAICT. 

BUT, AFAICT the API only allows one predicate key so you can't do what I think is needed here. That is, to say (taxonkey = 1 OR 2 OR 3) + (country = US AND hasCoordinate = true, etc.)

I tried sending two predicate keys in the API and only the second goes through. 

Any guidance much appreciated :)

The best solution I can think of is to do the query he's doing, but do one for each taxon. Seem like a good solution?

Best, Scott
_______________________________________________
API-users mailing list
API-users@lists.gbif.org
http://lists.gbif.org/mailman/listinfo/api-users