Querystring Search#
The @querystring-search
endpoint returns search results that can be filtered on search criteria.
Call the /@querystring-search
endpoint with either a POST
or GET
request.
When using the POST
request, provide a query in the request body:
POST /plone/@querystring-search HTTP/1.1
Accept: application/json
Authorization: Basic YWRtaW46c2VjcmV0
Content-Type: application/json
{
"query": [
{
"i": "portal_type",
"o": "plone.app.querystring.operation.selection.any",
"v": [
"Document"
]
}
]
}
curl -i -X POST http://nohost/plone/@querystring-search -H "Accept: application/json" -H "Content-Type: application/json" --data-raw '{"query": [{"i": "portal_type", "o": "plone.app.querystring.operation.selection.any", "v": ["Document"]}]}' --user admin:secret
echo '{
"query": [
{
"i": "portal_type",
"o": "plone.app.querystring.operation.selection.any",
"v": [
"Document"
]
}
]
}' | http POST http://nohost/plone/@querystring-search Accept:application/json Content-Type:application/json -a admin:secret
requests.post('http://nohost/plone/@querystring-search', headers={'Accept': 'application/json', 'Content-Type': 'application/json'}, json={'query': [{'i': 'portal_type', 'o': 'plone.app.querystring.operation.selection.any', 'v': ['Document']}]}, auth=('admin', 'secret'))
The server will respond with the results that are filtered based on the query you provided:
HTTP/1.1 200 OK
Content-Type: application/json
{
"@id": "http://localhost:55001/plone/@querystring-search",
"items": [
{
"@id": "http://localhost:55001/plone/front-page",
"@type": "Document",
"description": "Congratulations! You have successfully installed Plone.",
"review_state": "private",
"title": "Welcome to Plone",
"type_title": "Page"
},
{
"@id": "http://localhost:55001/plone/testdocument",
"@type": "Document",
"description": "",
"review_state": "private",
"title": "Test Document",
"type_title": "Page"
}
],
"items_total": 2
}
When using the GET
request, provide the query as a JSON URL-encoded string as a parameter.
GET /plone/@querystring-search?query=%257B%2522query%2522%253A%255B%257B%2522i%2522%253A%2522portal_type%2522%252C%2522o%2522%253A%2520%2522plone.app.querystring.operation.selection.any%2522%252C%2522v%2522%253A%255B%2522Document%2522%255D%257D%255D%257D HTTP/1.1
Accept: application/json
Authorization: Basic YWRtaW46c2VjcmV0
curl -i -X GET 'http://nohost/plone/@querystring-search?query=%257B%2522query%2522%253A%255B%257B%2522i%2522%253A%2522portal_type%2522%252C%2522o%2522%253A%2520%2522plone.app.querystring.operation.selection.any%2522%252C%2522v%2522%253A%255B%2522Document%2522%255D%257D%255D%257D' -H "Accept: application/json" --user admin:secret
http 'http://nohost/plone/@querystring-search?query=%257B%2522query%2522%253A%255B%257B%2522i%2522%253A%2522portal_type%2522%252C%2522o%2522%253A%2520%2522plone.app.querystring.operation.selection.any%2522%252C%2522v%2522%253A%255B%2522Document%2522%255D%257D%255D%257D' Accept:application/json -a admin:secret
requests.get('http://nohost/plone/@querystring-search?query=%257B%2522query%2522%253A%255B%257B%2522i%2522%253A%2522portal_type%2522%252C%2522o%2522%253A%2520%2522plone.app.querystring.operation.selection.any%2522%252C%2522v%2522%253A%255B%2522Document%2522%255D%257D%255D%257D', headers={'Accept': 'application/json'}, auth=('admin', 'secret'))
The server will respond with the results that are filtered based on the query you provided:
HTTP/1.1 200 OK
Content-Type: application/json
{
"@id": "http://localhost:55001/plone/@querystring-search?query=%257B%2522query%2522%253A%255B%257B%2522i%2522%253A%2522portal_type%2522%252C%2522o%2522%253A%2520%2522plone.app.querystring.operation.selection.any%2522%252C%2522v%2522%253A%255B%2522Document%2522%255D%257D%255D%257D",
"items": [
{
"@id": "http://localhost:55001/plone/front-page",
"@type": "Document",
"description": "Congratulations! You have successfully installed Plone.",
"review_state": "private",
"title": "Welcome to Plone",
"type_title": "Page"
},
{
"@id": "http://localhost:55001/plone/testdocument",
"@type": "Document",
"description": "",
"review_state": "private",
"title": "Test Document",
"type_title": "Page"
}
],
"items_total": 2
}
Parameters the endpoint will accept:
query
-plone.app.querystring
query, requiredb_start
- integer, batch startb_size
- integer, batch sizesort_on
- string, field that results will be sorted onsort_order
- string, value must be eitherascending
ordescending
limit
- integer, limits the number of returned resultsfullobjects
- boolean, iftrue
then return the full objects instead of just the summary serialization
Parameters#
Batch Start (b_start
)#
The b_start
parameter defines the first item of the batch:
{
"b_start": "5",
"query": [
{
'i': 'Title',
'o': 'plone.app.querystring.operation.string.is',
'v': 'Welcome to Plone',
}
]
}
The b_size
parameter is optional.
The default value is 0
.
Batch Size (b_size)#
The b_size
parameter defines the number of elements a single batch returns:
{
"b_size": "5",
"query": [
{
'i': 'Title',
'o': 'plone.app.querystring.operation.string.is',
'v': 'Welcome to Plone',
}
]
}
The parameter is optional.
The default value is 25
.
Sort on#
The sort_on
parameter defines the field that is used to sort the returned search results:
{
"sort_on": "sortable_title",
"query": [
{
'i': 'Title',
'o': 'plone.app.querystring.operation.string.is',
'v': 'Welcome to Plone',
}
]
}
The sort_on
parameter is optional.
The default value is None
.
Sort Order#
The sort_order
parameter defines the sort order when the sort_on
field has been set:
{
"sort_on": "sortable_title",
"sort_order": "reverse",
"query": [
{
'i': 'Title',
'o': 'plone.app.querystring.operation.string.is',
'v': 'Welcome to Plone',
}
]
}
The sort_order
parameter is optional.
The default value is ascending
.
The sort_order can be either ascending
or descending
.
ascending
means from A to Z for a text field.
reverse
is an alias equivalent to descending
.
Limit#
Querystring query
with a limit
parameter:
{
"limit": "10",
"query": [
{
'i': 'Title',
'o': 'plone.app.querystring.operation.string.is',
'v': 'Welcome to Plone',
}
]
}
The limit
parameter is optional.
The default value is 1000
.
Query#
The query
parameter is a list that contains an arbitrary number of filters
:
{
"query": [
{
'i': 'Title',
'o': 'plone.app.querystring.operation.string.is',
'v': 'Welcome to Plone',
}
]
}
A filter
always contains three values:
ì
: The index of the filter (the name of the field to which this filter is applied).o
: The operator of the filter. A full list can be found at plone/plone.app.querystring.v
: The value of the filter. This depends highly on the index. For a text index, this is a string. For a date index, this might be a date range.
The following types of filters are available:
Metadata filters
Date filters
Text Filters
Metadata Filters#
Creator#
The creator
of the content object.
You can either set the currently logged in user:
{
"query":[
{
"i":"Creator",
"o":"plone.app.querystring.operation.string.currentUser",
"v":""
}
],
}
…or set a username:
{
"query":[
{
"i":"Creator",
"o":"plone.app.querystring.operation.selection.any",
"v":["noam"]
}
]
}
Shortname#
Shortname
is the ID of the object that is shown as the last part of the URL:
{
"query":[
{
"i":"getId",
"o":"plone.app.querystring.operation.string.is",
"v":"hero"
}
]
}
Location#
Location
is the path of the content object on the site.
You can either set three kind of paths.
The absolute path from the portal root:
{
"query":[
{
"i":"path",
"o":"plone.app.querystring.operation.string.absolutePath",
"v":"/my-content-object"
}
]
}
The relative path from the current object:
{
"query":[
{
"i":"path",
"o":"plone.app.querystring.operation.string.relativePath",
"v":"../my-content-object"
}
]
}
The navigation path:
{
"query":[
{
"i":"path",
"o":"plone.app.querystring.operation.string.path",
"v":"/hero"
}
]
}
The computed path can be stored:
{
"query": [
{
'i': 'path',
'o': 'plone.app.querystring.operation.string.path',
'v': '00000000000000001',
}
]
}
The path can contain a depth parameter that is separated with ::
:
{
"query": [
{
'i': 'path',
'o': 'plone.app.querystring.operation.string.path',
'v': '/my-content-object::2',
}
]
}
Type#
Filter by portal type:
{
"query": [
{
"i": "portal_type",
"o": "plone.app.querystring.operation.selection.any",
"v": ["Document"],
}
]
}
Review State#
Filter results by review state:
{
"query":[
{
"i":"review_state",
"o":"plone.app.querystring.operation.selection.any",
"v":["published"]
}
]
}
Show Inactive#
Show inactive will return content objects that is expired for a given role:
{
"query":[
{
"i":"show_inactive",
"o":"plone.app.querystring.operation.string.showInactive",
"v":["Owner"]
}
]
}
Text Filters#
Description#
Filter content that contains a term in the Description field:
{
"query":[
{
"i":"Description",
"o":"plone.app.querystring.operation.string.contains",
"v":"Noam"
}
]
}
Searchable Text#
Filter content that contains a term in the SearchableText (all searchable fields in the catalog):
{
"query":[
{
"i":"SearchableText",
"o":"plone.app.querystring.operation.string.contains",
"v":"Noam"
}
]
}
Tag#
Filter by a tag (subjects field):
{
"query":[
{
"i":"Subject",
"o":"plone.app.querystring.operation.selection.any",
"v":["Astrophysics"]
}
]
}
Title#
Filter by exact Title match:
"query": [
{
'i': 'Title',
'o': 'plone.app.querystring.operation.string.is',
'v': 'Welcome to Plone',
}
]
Date Filters#
Creation Date#
Filter by creation date:
{
"query":[
{
"i": "created",
"o": "plone.app.querystring.operation.date.lessThan",
"v": "2021-11-11"
}
]
}
Effective Date#
Filter by effective date:
{
"query":[
{
"i": "effective",
"o": "plone.app.querystring.operation.date.largerThan",
"v": "2021-11-11"
}
}
]
}
Event end date#
Filter by event end date:
{
"query":[
{
"i": "end",
"o": "plone.app.querystring.operation.date.lessThan",
"v":"2021-11-04"
}
]
}
Event start date#
Filter by event start date:
{
"query":[
{
"i": "end",
"o": "plone.app.querystring.operation.date.lessThan",
"v":"2021-11-04"
}
]
}
Expiration date#
Filter by expiration date:
{
"query":[
{
"i": "expires",
"o": "plone.app.querystring.operation.date.largerThan",
"v": "2021-11-11"
}
}
]
}
Modification date#
Filter by modification date:
{
"query":[
{
"i": "modified",
"o": "plone.app.querystring.operation.date.largerThan",
"v": "2021-11-11"
}
}
]
}