Making advanced search queries
This article refers to the following API resources:
- Method:
POST - Endpoint:
/search - Description: Search specific sets of objects with filters.
- Authentication: Bearer token
Overview
The search feature has a crucial role in DataGalaxy’s API, it helps tackle complex problems and brings new customization possibilities to your automation.
This guide will give you a quick feature tour and cover the basics. We will then move on to a few use cases to demonstrate some of the search feature’s applications.
Basic request payload properties
query
The query property is a string that will be searched in the Description, Summary, and Name of an object. Use it as your search keyword, if one of the three attributes cited above contains it, it will be returned in the search result.
limit
The limit property is a number determining the maximum amount of objects returned by the API in the search result.
If you know your search should not return more than n objects, setting "limit" = n is a good practice to limit unnecessary network and server load.
versionId
Like any DataGalaxy API’s endpoint, the versionId is a string that will ensure your request is executed in the designated version’s perimeter.
This property should always be set if you know in which workspace or workspace version you want your search to be executed.
Advanced request payload properties
filters
This property is key when it comes to making advanced search queries. It lets you define a set of filters to make your search query more precise.
filters is a JSON Array, and each entry is a JSON Object made of three properties :
attributeKey: identifies the attribute to filter on (use the GET /attributes endpoint to find attributes and theirattributeKey)operator: determines the search’s behavior (list of available values in the API References)values: contains the list of values to filter. TheORoperator is applied between each value.
If you add multiple filters, the AND operator is applied between each filter, meaning an object has to match every filter for it to be returned in the search result.
{
"filters": [
{
"attributeKey": "TechnologyCode",
"operator": "contains",
"values": ["mysql"]
},
{
"attributeKey": "EntityStatus",
"operator": "contains",
"values": ["Proposed", "Obsolete"]
}
]
}
includedAttributes
The includedAttributes property is a JSON Array and each entry is a string containing an attributeKey. Attributes in the includedAttributes property will be included in each object returned in the search result.
{
...,
"includedAttributes": [ "DataOwners", "EntityStatus", "Domains" ]
}
{
...,
"result": {
"entities": [
{
"name": "Score",
"type": "UsageField",
...,
"attributes": {
"owners": [ "john.smith@datagalaxy.com" ],
"status": "Proposed",
"tags": ["GDPR"]
},
...
],
...
}
}
Use the GET /attributes endpoint to find attributes and their attributeKey.
includeAccessData
When set to true, this boolean property will return the list of access rights the requesting token has on each object.
Check out the search endpoint documentation to see an example.
saveSearchPayload
This boolean property will save your request payload when set to true.
Your saved payload can then be retrieved with the GET /history/search/queries endpoint (see API Reference).
Search Use Cases
1. Retrieving a list of objects modified in the last seven days
Time filters are an exception, the values property must stay empty, and the operator property will contain one of the following values:
pastHour, today, yesterday, currentWeek, pastWeek, beforeCurrentWeek, beforePastWeek, currentMonth, pastMonth, beforeCurrentMonth, beforePastMonth, bedoreToday, currentYear, last365days, isEmpty, isNotEmpty.
{
"filters": [
{
"attributeKey": "LastModificationTime",
"operator": "currentWeek",
"values": []
}
]
}
2. Filtering objects on a set of owners/stewards users
When filtering on a list of users, we first have to get each user’s id (i.e.: userId) with the GET /users endpoint.
curl 'https://{clientName}.api.datagalaxy.com/v2/users?userId=a862af3a-9a9a-4858-b09e-ee8e68758a62' -H 'Authorization: Bearer {token}'
{
"results": [
{
"userId": "a862af3a-9a9a-4858-b09e-ee8e68758a62",
"licenseLevel": "Steward",
"firstName": "John",
"lastName": "Smith",
"email": "john.smith@datagalaxy.com",
...
},
...
]
}
Once we fetch the userIds we can start building our search query :
{
"filters": [
{
"attributeKey": "DataOwners",
"operator": "contains",
"values": ["a862af3a-9a9a-4858-b09e-ee8e68758a62"]
}
]
}
3. Finding objects based on their links to others
Link-based filters have special attributeKeys built with a ObjectLinks_ prefix, like this : ObjectLinks_{linkType}
The values property expects a list of objectId / entityId corresponding to the object
For example, a search filter on objects with a link of type HasForDomain to a specific object will be :
{
"filters": [
{
"attributeKey": "ObjectLinks_HasForDomain",
"operator": "contains",
"values": ["{objectId}"]
}
]
}