Table of Contents
Query Filters
Table of Contents
Query filters (Channel Filter or Filters in Fields) help restrict the values available for tagging in a tagbox, e.g., showing only products for EMEA, or the Content Items displayed in a specific Channel, e.g., only approved product marketing content. Those filters do not require user input; they have a fixed return set based on specific criteria, e.g., showing only Arrangements, only current employees, or only players from Real Madrid. Query filters are available for channels, fields (Tagbox, Relationship), and via the API (searching content, creating channels, tagbox fields, relationship fields, or lists). The advanced filter editor lets you build complex filters via drag-and-drop.
Create filters in tagbox with filter editor
Prerequisites:
- Field “Focus Topic”
- ID: focusTopic
- Connected List: Controlled Vocabulary
Goal:
- In a Tagbox "Focus Topic" we only want to show active values and concepts.
How to
- Create a Tagbox (multi)
- Name it “Focus Topic”
- Connect to “Controlled Vocabulary”
- Open Advanced Filter Editor
- Select State Field from Controlled Vocabulary List
- Set “State equals Active”
- Add
- Save
Advanced filter editor to set filter in tagbox (multi).
Create filters in tagboxes from default values
Prerequisites:
- Field “Focus Theme”
- ID: focusTheme
- Connected List: Controlled Vocabulary
- Field: Classification (controlledVocabulary.classification.name)
- ID: classification
- Connected List: Classification
- Field: Name
- ID: name
- Field: State (controlledVocabulary.state.name)
- ID: state
- Connected List: State
- Field: Name
- ID: name
- Field: Classification (controlledVocabulary.classification.name)
Goal:
- In a Tagbox "Focus Theme" we only want to show active values and concepts.
- We need two criteria that must both be met: AndFilter.
- We need to check for a term in the field state: TermFilter.
- We need to check for a term in the field classification: TermFilter.
Using Tagbox default values
Fotoware Alto provides assistance when building a query filter for a tagbox. You can assign default values and let Fotoware Alto build the filter based on them. Advanced filter editor to set a filter in the tagbox (multi).
- Edit the Tagbox
- Open the "Default Values" tab
- Assign the required values
- Open the "General" tab
- Find the "Item Filter"
- Press "Select from default values"
VIDEO: How to Use Default Values for Tagboxes in Layers:
Create filters in tagboxes from code examples in Manual
Prerequisites:
- Field “Focus Theme”
- ID: focusTheme
- Connected List: Controlled Vocabulary
- Field: Classification (controlledVocabulary.classification.name)
- ID: classification
- Connected List: Classification
- Field: Name
- ID: name
- Field: State (controlledVocabulary.state.name)
- ID: state
- Connected List: State
- Field: Name
- ID: name
- Field: Classification (controlledVocabulary.classification.name)
Goal:
- In a Tagbox "Focus Theme" we only want to show active values and concepts.
- We need to have two criteria, which both must be met: AndFilter.
- We need to check for a term in the field state: TermFilter.
- We need to check for a term in the field classification: TermFilter.
Using documented query filters
- Find the documented Query Filters
- Find the required Query Filters
- Copy and paste the code examples as needed. Fotoware Alto will format the code when you select Save.
- Update the missing field path by following the suggestions shown when you click the underlined value.
Create filters in tagboxes from Monaco Editor Intellisense
Prerequisites:
- Field “Focus Theme”
- ID: focusTheme
- Connected List: Controlled Vocabulary
- Field: Classification (controlledVocabulary.classification.name)
- ID: classification
- Connected List: Classification
- Field: Name
- ID: name
- Field: State (controlledVocabulary.state.name)
- ID: state
- Connected List: State
- Field: Name
- ID: name
- Field: Classification (controlledVocabulary.classification.name)
Goal:
- In a Tagbox "Focus Theme" we only want to show active values and concepts.
- We need two criteria that must both be met: AndFilter.
- We need to check for a term in the field state: TermFilter.
- We need to check for a term in the field classification: TermFilter.
Using Monaco Editor Intellisense
The Monaco Editor provides some IntelliSense, or code completion. Find some explanations for the Monaco Editor in the frameworks section. Ctrl + Space is especially helpful for getting suggestions.
- Edit the Tagbox
- Find the "Item Filter" in the opened "General" tab
- Click into the empty field
- Press Ctrl + Space
- Add the empty filter object: {}
- Press Ctrl + Space
- Choose a kind to select your filter
- "AndFilter" is added by default
- Add a comma
- Press Ctrl + Space
- See the properties required for the AndFilter
- Repeat steps 6 - 11 until you have your Query Filter.
Types of query filters
Check all solutions for query filters here.
And filter
Show Content with Layer Corporate and Event, but only images.
{
"kind": "AndFilter",
"filters": [
{
"kind": "TermFilter",
"field": "layerSchemaIds",
"term": "CorporateLayer"
},
{
"kind": "TermFilter",
"field": "layerSchemaIds",
"term": "EventLayer"
},
{
"kind": "TermFilter",
"field": "contentSchemaIds",
"term": "ImageMetadata"
}
]
}
Basic filter
All the provided criteria must be met.
{
"kind": "AndFilter",
"filters": [
{ filter1 },
{ filter2 }
]
}
Properties
| kind | string, required |
| filters | one or multiple, Array of objects, Nullable |
Items with layer product details AND layer product marketing
// Complete example
{
"kind": "AndFilter",
"filter": [{
"kind": "TermFilter",
"field": "layerSchemaIds",
"term": "ProductDetails" // ID of Layer, capitalized
},
{
"kind": "TermFilter",
"field": "layerSchemaIds",
"term": "ProductMarketing" // ID of Layer, capitalized
}
]
}
OR filter
Show Corporate or Event Content in a Channel.
{
"kind": "OrFilter",
"filters": [
{
"kind": "TermFilter",
"field": "layerSchemaIds",
"term": "CorporateLayer"
},
{
"kind": "TermFilter",
"field": "layerSchemaIds",
"term": "EventLayer"
}
]
}
Basic filter
One or more of the provided criteria must be met.
{
"kind": "OrFilter",
"filters": [
{ filter1 },
{ filter2 }
]
}
Properties
| kind | string, required |
| Filters |
One or multiple Array of objects, Nullable |
Items with layer product details OR layer product marketing
// Complete example
{
"kind": "OrFilter",
"filter": [{
"kind": "TermFilter",
"field": "layerSchemaIds",
"term": "ProductDetails" // ID of Layer, capitalized
},
{
"kind": "TermFilter",
"field": "layerSchemaIds",
"term": "ProductMarketing" // ID of Layer, capitalized
}
]
}
Not filter
Hide Stock content; Not the content with Layer Stock Info applied.
// Complete example
{
"kind": "NotFilter",
"filter": {
"kind": "TermFilter",
"field": "layerSchemaIds",
"term": "StockInfo" //Layer_ID capitalized
}
}
Basic filter
Not the provided criteria.
{
"kind": "NotFilter",
"filter": { filter1 }
}
Properties
| kind | string, required |
| Filter |
only one object, required (one filter) |
Not the items with layer corporate information
// Complete example
{
"kind": "NotFilter",
"filter": {
"kind": "TermFilter",
"field": "layerSchemaIds",
"term": "CorporateInformation" //ID_OF_LAYER capitalized
}
}
Nested filter for multi tagboxes
Also for multi-relationship fields and multi-fieldset fields.
Layer Corporate assigned, but no events tagged in the Corporate Layer.
{
"kind": "AndFilter",
"filters": [
{
"kind": "TermFilter",
"field": "layerSchemaIds",
"term": "CorporateLayer"
},
{
"kind": "NestedFilter",
"path": "corporateLayer.events",
"filter": {
"kind":"NotFilter",
"filter": {
"kind": "ExistsFilter",
"field": "corporateLayer.events._refId"
}
}
}
]
}
Basic filter
Filter on criteria from nested documents (multi tagboxes, multi relations, multi fieldsets, not translations), e.g., product numbers from a list that is assigned via a product information tagbox.
{
"kind": "NestedFilter",
"path": "fieldpath",
"filter":
{ filter1 }
}
Properties
| kind | string, required, e.g., “NestedFilter” |
| path | The path pointing to the nested document (i.e., personLayer.nestedAddress). The whole collection of tags (my array). |
| filter (single) | The filter to be applied for nested documents, basically, which value you want to get from the array of nested values. |
Layer assigned and events tagged in layer
// LAYER CORPORATE ASSIGNED AND EVENTS TAGGED IN LAYER
{
"kind": "AndFilter",
"filters": [
{
"kind": "TermFilter",
"field": "layerSchemaIds",
"term": "CorporateLayer"
},
{
"kind": "NestedFilter",
"path": "corporateLayer.events",
"filter": {
"kind": "ExistsFilter",
"field": "corporateLayer.events._refId"
}
}
]
}
Single term filter
Filter for Content with the Migration Layer added and the term “Product” as keyword assigned.
{
"kind": "AndFilter",
"filters": [
{
"kind": "TermFilter",
"field": "layerSchemaIds",
"term": "MigrationLayer" //Layer ID capitalized
},
{
"kind": "NestedFilter",
"path": "migrationLayer.keywords",
"filter": {
"kind": "TermFilter",
"field": "migrationLayer.keywords.name",
"term": "Product"
}
}
]
}
Basic filter
Filter for content that has the exact term in a field. It can be used for a single tag box directly. For a multi-tagbox, a nested filter must be used in combination with the term filter.
The term must be an exact match.
{
"kind": "TermFilter",
"field": "fieldpath",
"term": "Europe"
}
Properties
| kind |
Required Which filter to use, as a string, e.g., field name to "TermFilter" |
| field |
Required The field name to filter on. It is composed of the field IDs of the hierarchy joined with "." (i.e., personLayer.address.region).the |
| term |
Required The value in the field, to be used as term. It must be an exact match, so the term filter on "Europe" does not find "Western Europe", but only "Europe". |
Multiple terms filter
Items with all Layers assigned.
{
"kind": "TermsFilter",
"field": "layerSchemaIds",
"terms": [
"CorporateLayer",
"MediaLayer",
"GeneralLayer"
]
}
Exclude Images, Videos, Virtual Press Kits.
{
"kind": "NotFilter",
"filter": {
"kind": "TermsFilter",
"field": "contentSchemaId",
"terms": [
"PressKit",
"ImageMetadata",
"VideoMetadata"
]
}
}
Basic filter
Filter for content that has the exact term in a field. It can be used for a single tagbox directly. For multi-tagbox, fieldset, and relation use the Terms filter inside the Nested Filter.
Each term must be an exact match.
{
"kind": "TermsFilter",
"field": "layerId.fieldId",
"terms": [
"Germany",
"Austria",
"Switzerland"
]
}
Properties
| kind |
Required Which filter to use, as a string, e.g., Required array: Array of terms that must be as values in the field, to be used as terms.It is composed of the field IDs of the hierarchy joined with "." (i.e., personLayer.address.region). "TermsFilter" |
| field |
Required The field name to filter on. It is composed of the field IDs of the hierarchy joined with "." (i.e., personLayer.address.region). |
| terms | Required array: Array of terms that must be as values in the field, to be used as terms. It must be an exact match. The term "Europe" does not include "Western Europe"; it refers only to "Europe". |
All Items with inappropriate keywords (Content Moderation)
{
"kind": "NestedFilter",
"path": "autoTagging.matches",
"filter": {
"kind": "TermsFilter",
"field": "autoTagging.matches.name.en",
"terms": [
"Alcohol",
"Drugs",
"Tobacco"
]
}
}
Exists filter
Content Items where in the Layer Corporate Events are tagged (_refId exists).
{
"kind": "NestedFilter",
"path": "corporateLayer.events",
"filter": {
"kind": "ExistsFilter",
"field": "corporateLayer.events._refId"
}
}
Basic filter
Show all content where a specific field exists in the metadata profile or content profile.
{
"kind": "ExistsFilter",
"field": "corporateInformation.copyright"
}
Properties
| kind | Discriminator, string, required |
| field |
The field name to execute the filter on. It is composed of the field IDs of the hierarchy joined with "." (i.e., personLayer.address.street).to
|
Examples
Show content with the copyright field available, therefore the admin knows which images have copyright information and which content needs to be checked for correct copyright information.
Date range filter
Show content modified in December 2020.
// USING EXACT DATES
{
"kind": "DateRangeFilter",
"field": "audit.modificationDate",
"range": {
"names": {
"fieldId.en":"Dec 2020",
"fieldId.de":"Dez 2020"
},
"from": "2020-12-01T00:00:00.000",
"to": "2020-12-31T00:00:00.000",
}
}
Show content with a publish date in the last 30 days.
// USING DAY CALCULATIONS
{
"kind": "DateRangeFilter",
"field": "corporateInformation.publishDate",
"range": {
"names": {
"fieldId.en":"Last 30 days"
"fieldId.de":"Letzte 30 Tage"
},
"from": "now-30D",
"to": "now"
}
// USING COMBINATIONS
{
"kind": "DateRangeFilter",
"field": "corporateInformation.embargoDate",
"range": {
"names": {
"fieldId.en":"Last 30 days"
"fieldId.de":"Letzte 30 Tage"
},
"from": "now-30D",
"to": "now"
},
{
"names": {
"fieldId.en":"Last fiscal year"
"fieldId.de":"Last fiscal year"
},
"from": "2019-03-31T01:02:02.000",
"to": "2020-03-31T01:02:02.000"
}
}
Fotoware Alto supports
- Y (years), M (months), D (days), H (hours), m (minutes)
- Calculations starting with now, e.g., now+30D, now-30D
- Anchor dates and rounding are not supported (e.g., Jun 5th + 30d; now/M for the current month)
Basic filter
Only content with a date/date-time value in the specified range.
Date Format: YYYY-MM-DDTHH:MM:SS:MMM
- Year-Month-DayTHour-Minute-Second-Millisecond
{
"kind": "DateRangeFilter",
"field": "fieldpath",
"range": {
"names": {
"fieldId.en":"english text shown to the user",
"fieldId.de":"german text shown to the user"
},
"from": "YYYY-MM-DDTHH:MM:SS:MMM",
"to": "YYYY-MM-DDTHH:MM:SS:MMM",
}
}
Properties
| kind | Discriminator, string, required |
| field | The field name to filter on. It is composed of the field IDs of the hierarchy joined with "." (i.e., personLayer.address.street), check DateTime field values |
| range | If no range is provided, the filter will throw a “query execution failure” error and display it as empty. |
| names | The translations of the ranges are nullable, language-specific range names |
| from | date-time string or a pattern: now(+-)(int)(YMDHm). |
| to | date-time string or a pattern: now(+-)(int)(YMDHm). |
Number filter
Only Items between 150 and 300 width
{
"kind": "NumericRangeFilter",
"field": "fileMetadata.width",
"range": {
"names": {
"fieldId.en":"low res",
"fieldId.de":"low res"
},
"from": "150",
"to": "300"
}
}
Basic filter
Filter content that has a numeric field value in the configured range.
{
"kind": "NumericRangeFilter",
"field": "layerId.fieldId",
"range": {
"names": {
"fieldId.en":"low res",
"fieldId.de":"low res"
},
"from": "0",
"to": "150"
}
}
Properties
| kind | Discriminator, string, required |
| field | The field's name to execute the filter. It is composed of the field IDs of the hierarchy joined with "." (i.e., personLayer.address.street), check the DateTime field. |
| range |
The range for the value of the numeric field. If no range is provided, the filter in facets shows an error "query execution failure". At least one range is required. |
| names | The translations of the ranges. The values are nullable (can be empty) if provided. If no range is provided, the filter in facets shows an error "query execution failure." contain language-specific range names |
| from | A whole or decimal number. |
| to | A whole or decimal number. |
Prefix filter
Show only technical documentation for admins, which is based on an existing file naming convention that starts with “ADMIN”. We have to use the Nested Filter as the Media Type is a multi-tagbox.
{
"kind": "NestedFilter",
"path": "productDocumentation.mediaType",
"filter": {
"kind": "PrefixFilter",
"field": "productDocumentation.mediaType.code",
"prefix": "ADMIN"
}
}
Basic filter
Filter for content that has the defined prefix as the value in a defined field. This works best for fields that have a fixed prefix, e.g., if you work with codes INT for internal, or SOCIAL for social media content.
{
"kind": "PrefixFilter",
"field": "fieldpath",
"prefix": "Anniversary"
}
Show content with the prefix "anniversary" in the event name field to only show anniversary events.
Properties
| kind |
Required Which filter to use, as a string, e.g., field name to "PrefixFilter" |
| field |
Required The field name to filter on. It is composed of the field IDs of the hierarchy joined with "." (i.e., personLayer.address.street). |
| prefix | Required: The value in the field is to be used as a prefix. a It is composed of the field IDs of the hierarchy joined with "." (i.e., personLayer.address.street). |
Product codes starting with FRU
Best suited for products following a strict naming convention. As you can add a prefix to your Camera for file naming, you can also prepare the content with the correct "prefix" before uploading to Fotoware Alto. See a Nikon tutorial on file naming.
{
"kind": "PrefixFilter",
"field": "productLayer.products.code",
"prefix": "FRU"
}
Geo Bounding box filter
Show only content created in Aarau.
{
"kind": "GeoBoundingBoxFilter",
"field": "fieldpath",
"topLeft": {
"lat": 47.4117082,
"lon": 8.0569206,
},
"bottomRight": {
"lat": 47.3854459,
"lon": 9.0569206,
}
}
Behavior
Creates a rectangle of geo points using TopLeft (1) and BottomRight (2) points and filters for the content whose Geo Point values are inside this rectangle.

Properties
| kind |
Required Which filter to use, as a It is composed of the field IDs of the hierarchy joined with "." (i.e., personLayer.address.region). It is composed of the field IDs of the hierarchy joined with "." (i.e., personLayer.address.region). whoseRequired: The value in the field is to be used as a prefix.string e.g. "GeoBoundingBoxFilter" |
| field |
Required The field name to filter on. It is composed of the field IDs of the hierarchy joined with "." (i.e., personLayer.address.region). |
| topLeft | The top left corner of the bounding box's geolocation (latitude and longitude). |
| lat | Latitude value (decimal value) |
| lon | Longitude (decimal value) |
| bottomRight | The bottom right corner of the bounding box's geolocation (latitude and longitude). |
| lat | Latitude value (decimal value) |
| lon | Longitude (decimal value) |
Geo Distance filter
Show all Fotoware partners within a 50km radius of Berlin. This way, your salespeople can get an easy overview of partners to visit or to invite to a specific partner event.
{
"kind": "GeoDistanceFilter",
"field": "layerId.fieldId",
"location": {
"lat": 52.5200,
"lon": 13.4050,
},
"distance": 50000 // DISTANCE IN METERS
}
Basic filter
Geo values at position, e.g., all images from Aarau and 100m distance (radius).
{
"kind": "GeoDistanceFilter",
"field": "layerId.fieldId",
"location": {
"lat": 47.4117082,
"lon": 8.0569206,
},
"distance": 100
}
Properties
| kind |
Required Which filter to use, as a string,top-left corner of the bounding box's geographic, e.g., "GeoDistanceFilter" |
| field |
Required The field name to filter on. It is composed of the field IDs of the hierarchy joined with "." (i.e., personLayer.address.region). |
| location | The top-left corner of the bounding box's geographic location (latitude and longitude). |
| Lat | Latitude value (decimal value) |
| Lon | Longitude (decimal value) |
| distance | The distance in meters from the point of origin (location). |
Show only customers in my region
Show all customers 200km from my location, so I know which ones to include in my marketing campaigns.
{
"kind": "GeoDistanceFilter",
"field": "keyAccountCustomers.headquarter.location",
"location": {
"lat": 40.7128,
"lon": 74.0060,
},
"distance": 200000
}