Model API features two main queries – models and model. The models query is essentially a search-engine, whereas the model query retrives information from a singular model - directly.
Learning to build powerful models queries can lead to efficient application design and will provide greater insights into the models in your account.
Models Schema
The models query has 5 optional parameters that will allow you to fine tune the returned data.
Leaving all of these blank will result in a list of 10 active models sorted by created_time in descending order.
query {
models(
include: [SearchInclusion!],
query: String,
sortBy: [ModelSort!],
pageSize: Int,
offset: String
): ModelSearchResultList
}
| argument | required? | default | values |
include |
no | demo, inactive | |
query |
no | * | * for all. ES Syntax |
sortBy |
no | [{field: created_time, order: desc}] |
|
pageSize |
no | 10 | 1 - 1000 |
offset |
no | null | Any value returned from the nextOffset from the previous result |
The results of the models() query will return totalResults, nextOffset (if totalResults > pageSize), and the results. You can use the nextOffset in a subsequent models() query.
type ModelSearchResultList {
nextOffset: String
totalResults: Int!
results: [ModelSearchResult!]
}
For a complete list of fields returned in ‘results’, click here
Building Powerful query strings
Any field defined in ModelSearchResult may be included as a keyword in the models query.
For example “name: Demo” would search for models with the word Demo in the name. A search for “mattertags.labels: kitchen” would search for any models that have at least one mattertag with the word kitchen in the label.
Sample Queries
Find all the models in Lawrence, KS:
query {
models (query: "address.locality:\"Lawrence\" AND address.administrativeArea: \"KS\"") {
totalResults
nextOffset
results {
id
name
}
}
}
Find all the models with at least one unplaced sweeps
query {
models (query: "assets.panoLocations.placement: \"UNPLACED\"") {
totalResults
nextOffset
results {
id
name
}
}
}
Find all the models edited since Oct 10th that have at least one measurement:
query {
models (query: "modified:[2019-10-10 TO *] AND measurements.count:[1 TO *]") {
totalResults
nextOffset
results {
id
name
}
}
}
Searchable Fields
| Field | Default | Type |
| id | * | |
| internalId | * | |
| created | * | DateTime |
| modified | * | DateTime |
| name | * | Text |
| description | * | Text |
| visibility | * | public, private |
| demo | false | true, false |
| address | * | Text |
| address.streetAddressLines | Y | Text |
| address.administrativeArea | Y | Text |
| address.locality | Y | Text |
| address.dependentLocality | Y | Text |
| address.countryName | Y | Text |
| address.postalCode | N | Keyword |
| address.countryCode | ** | Keyword |
| geolocation | N | Geo-Point |
| floors.count | N | Integer |
| floors.tags | Y | Set Keyword |
| rooms.count | N | Integer |
| rooms.label | Y | Text |
| rooms.tags | Y | Set Keyword |
| mattertags.count | N | Integer |
| mattertags.label | Y | Set Text |
| mattertags.description | Y | Set Text |
| mattertags.mediaType | Y | Set Keyword |
| measurements.count | N | Integer |
| measurements.label | Y | Set Text |
| mls.id | Y | Text |
| mls.name | Y | Text |
| assets.panos.count | N | Integer |
| assets.panos.format | N | Set Keyword |
| assets.panos.resolution | N | Set Keyword |
| assets.clips.count | N | Integer |
| assets.clips.format | N | Set Keyword |
| assets.clips.label | Y | Set Text |
| assets.photos.count | N | Integer |
| assets.photos.format | N | Set Keyword |
| assets.photos.label | Y | Set Text |
| assets.photos.resolutions | N | Set Keyword |
| assets.meshes.count | N | Integer |
| assets.meshes.format | N | Set Keyword |
| assets.textures.count | N | Integer |
| assets.textures.format | N | Set Keyword |
| assets.locations.count | N | Integer |
| assets.locations.tags | Y | Set Keyword |
| assets.panoLocations.count | N | Integer |
| assets.panoLocations.placement | N | Set Keyword |
| assets.panoLocations.variant | N | Set Keyword |