API Change History
Public release notes for all versions of Globus Search.
1.30.0 (2024-11-13)
-
Add a new
delete_by_query#1.0.0
document format for Delete By Query requests.The new format does not allow the use of fields, such as
sort
, which were previously allowed by the API but which had no effect on the deletion.Delete By Query requests that do not specify that the
@version
isdelete_by_query#1.0.0
will continue to function without modification.
1.29.0 (2024-11-06)
-
When getting information about a specific index, the response document now includes the permissions of the principal that made the request.
1.28.1 (2024-10-23)
-
Queries with version
query#1.0.0
are now rejected if they define any facets with identical names. -
Queries with version
query#1.0.0
now support facet-specificadditional_filters
fields.-
An aggregate limit of 96 has been applied to all
filters
,post_facet_filters
, andadditional_filters
in a single query.
-
-
Added a new scroll document version,
scroll#1.0.0
, which handles filters akin to the newquery#1.0.0
definition.
1.26.0 (2024-09-27)
-
Improved the behavior of authentication failures due to upstream errors.
-
Added a new query document version,
query#1.0.0
, which:-
Replaces the keyword
post_filter
withpost_facet_filters
. -
Removes the keywords
@datatype
and@version
fromsort
,boost
,facet
, andfilter
type sub-documents. -
Removes support for "auto-listifying nested fields" in
sort
,boost
,facet
, andfilter
sub-documents. Nested fields must always be supplied as a list, never singleton objects.
-
-
Globus Search now supports a new filter type,
GFilterLike
, which implements basic wildcard query semantics. A "like" filter takes the form{"type": "like", "field_name": "my_field", "value": "filter-expression"}
.-
Filter expressions may contain
*
, matching any number of characters, and?
, matching any one character. -
The fields specified by "like" filters must be text fields.
-
-
Internal robustness and performance enhancements
1.25.0 (2024-08-28)
-
Added two new query filter types:
and
andor
to support composing and unioning query criteria together. For more information on how to use these filters, see GFilterAnd and GFilterOr. -
Added four new keywords to range filters:
gte
,lte
,gt
,lt
to allow for more precise range filtering. For more information on how to use these keywords, see POST Queries and Filters.
-
Removed the deprecated
result_format_version
parameter from thePOST Query
API.
1.24.0 (2024-08-21)
-
Removed the deprecated
result_format_version
parameter from the following three APIs:GET Query
,Get By Entry ID
,Get By Subject
.
1.22.0 (2024-07-10)
-
Added BurstQueryCapacity rate limiting.
-
Search queries which take longer than 2 seconds to execute are now tracked in a 30-second expiring rate limit window (associated with the caller).
-
Any caller accumulating more than 90 of these "BurstSeconds" (query execution seconds beyond the 2-second allotment) will now receive a 429 on subsequent post-search, get-search, and scroll operations until their 30-second rate limit window expires.
-
1.21.0 (2024-05-31)
-
Globus Search now supports a new type of filter for searching geospatial datatypes. A
geo_shape
filter tests the relationship between data in the index and a provided GeoJSON Polygon.-
The new filter can be requested using
"type": "geo_shape"
in a POST query filter. -
geo_shape
filters must contain ashape
field containing a GeoJSON Polygon. Other geometries may be added in the future. -
geo_shape
filters support a field,relation
, which determines which relationship between shapes is being tested.relation
can be one ofintersects
orwithin
and defaults tointersects
. -
intersects
filters can be used ongeo_shape
andgeo_point
data, butwithin
filters can only be used ongeo_shape
data. -
GeoJSON Polygons are defined by RFC 7946, the GeoJSON format specification.
-
-
Globus Search now supports
post_filter
as a parameter on filters, controlling whether they are applied before or after facets are calculated. The default behavior forpost_filter
, when omitted, matches Globus Search’s previous behavior for facet and filter interactions. -
Internal robustness and performance enhancements
1.20.0 (2023-10-18)
-
A new filter type has been added,
"type": "exists"
. These filters take no additional parameters beyond the type and the field name, and match documents where a desired field is present with a non-null value. -
Add support for filters of type
"not"
, which negate their contained filter. A "Not Filter" contains another filter inside the"filter"
field and inverts the meaning of that filter. For example, a filter of the form{ "type": "not", "filter": { "type": "match_all", "field_name": "foo", "values": [ "bar" ] } }
will match any document in which the field
foo
does not contain the stringbar
. For more information on how to use"not"
, see the reference documentation on POST Queries and Filters. -
Internal robustness improvements
1.19.1 (2023-08-02)
-
Fixed an issue in which specifying a negative boost factor on a query would result in opaque errors. These are now caught and rejected with a more specific error message.
1.19.0 (2023-06-28)
-
Globus Search will no longer represent boolean values internally as strings; they will be represented as booleans. This results in an unavoidable backwards-incompatible API change.
-
This fixes a bug in which ingesting a document with the strings
"True"
or"False"
would return documents on query containing booleantrue
orfalse
. -
For existing indices with mappings already defined, documents will continue to ingest successfully, as boolean values are allowed for string fields.
-
For any existing documents prior to this change containing the boolean values
true
orfalse
, Globus Search responses will now contain"True"
and"False"
. This reflects the data transformation which happened in the past and affected existing documents, but which is no longer re-transformed on output. -
In certain cases, some sequences of documents which would have previously ingested successfully will now fail. In particular, it used to be valid to first index a boolean value (
true
orfalse
) for a field and later store string values in that field. This is no longer allowed, as the boolean type of the field is now correctly assigned and enforced. -
For assistance updating existing indices to translate data, or to help assess the impact of this change on applications, please contact
support@globus.org
-
-
The
match_any
andmatch_all
filter clauses now accept boolean values. In JSON, these aretrue
andfalse
. These will only match on boolean field types, not on data which was translated to"True"
or"False"
in a past version of Globus Search.-
For users wishing to filter on boolean fields which predate the v1.19.0 release, a filter of the following form can be used to match booleans:
{ "field_name": "foo", "type": "match_any", "values": [ "True", true ] }
-
For users wishing to filter on boolean fields created after the v1.19.0 release,
match_any
andmatch_all
filters cannot take string values. Note that this only holds for newly defined fields. For any such new fields, thematch_any
andmatch_all
filters should only contain the true boolean valuestrue
andfalse
, as in:{ "field_name": "foo", "type": "match_any", "values": [ true, false ] }
-
-
Index management APIs are now available under the
/v1/
namespace:-
Index Create:
POST /v1/index
-
Index Delete:
DELETE /v1/index/<index_id>
-
Index Reopen:
POST /v1/index/<index_id>/reopen
-
The beta versions of the index management APIs are still available,
but officially deprecated. They are aliases of the /v1/
routes.
1.18.9 (2023-04-19)
-
Added support for batch document deletion via new
batch-delete-by-subject
route-
For a detailed specification, see Batch Delete by Subject
-
-
A task requesting the deletion of a non-existent document is now marked as "SUCCESS"
1.18.8 (2023-03-30)
-
Fix task cleanup; tasks older than 30 days will now be deleted as expected
-
Include the Search version in a
version
field forGET /
-
When insufficient scopes are used for an API request, the
code
field is now set toForbidden.InsufficientScopes
so that error summary info will more easily include the cause -
Improve the preparation of pending tasks, increasing performance
1.18.6 (2023-02-15)
-
Added the field
task_type
to response objects in theGetTask
andTaskList
APIs
-
Fixed error messaging on incorrectly typed fields whose name contains a
.
1.18.4 (2022-10-26)
-
Support for
all_authenticated_users
as a document visibility value-
More details can be found at Visibility Values
-
1.18.0
-
Range filters are now always inclusive on their upper bounds. They previously would be exclusive unless the upper and lower bounds matched exactly, which resulted in surprising semantics when date ranges were used.
-
Get by Entry ID now correctly handles the case of the null Entry ID. It previously returned all entries instead of the entry with a null ID.
-
Invalid facet names containing '[', ']', '>' are now detected and rejected with a specific error.
-
Delete by Subject is now allowed for users with the
writer
role on an index. This previously requiredadmin
orowner
1.17.2
-
A malformed Authorization header will always be treated as a 401 Unauthorized error
-
Internal robustness improvements
1.17.0
-
Queries with unbounded or large numbers of buckets in aggregations may now trigger a 400-class error (a bad query error) instead of a 500. These are triggered by users sending a type of query which exceeds internal limits
-
The
role_id
shown in aNoSuchRole
error is now rendered correctly
-
Beta support for
geo_bounding_box
filters andgeo_point
andgeo_shape
datatypes. These are now documented in our openapi and redoc documentation but are not yet meant for general use -
Improvements to robustness to reduce the frequency of failed queries
-
Ingest errors may now contain a field in
additional_details
namedcaused_by
which shows a detailed message about the cause of the failure
1.16.0
-
Some request failures due to internal timeouts have been fixed
-
A new (beta) API for index deletion is now available to index owners and admins,
DELETE /beta/index/<index_id>
-
A deleted index enters a
delete-pending
state prior to deletion. For trial indices, deletion will take place within a few minutes. For non-trial indices, the index will be unusable but will only be deleted after 30 days -
Owners of a non-trial index in the
delete-pending
state can use the reopen API,POST /beta/index/<index_id>/reopen
to change the index status back toopen
fromdelete-pending
-
When an index is marked
delete-pending
,PENDING
tasks on that index are immediately stopped and set to a state ofCANCELLED
. Tasks which are already inPROGRESS
are allowed to complete
-
-
A new field is added to Index List and Index Show APIs,
status
.status
has a value of either"open"
or"delete-pending"
, depending on the index state
1.15.4
-
@context
expansion, which is no longer used by any indices, has been removed
-
Fixed an issue in which rate limiting could rarely cause requests to fail incorrectly
1.15.2
-
The
@context
expansion feature on Ingest is now considered deprecated and will be disabled on all new indices-
When context-expansion is disabled, the
content
field is left unmodified prior to data being indexed, and@context
may be a valid field name
-
-
Delete By Query operations with
filter
clauses were not handled correctly, resulting in failing tasks
-
The
is_trial
andsubscription_id
attributes are now included in the Index Show and Index List APIs
1.15.0
-
A new (beta) index creation API is now available to all Globus users
-
The user who creates an index will be given an
owner
role on it -
Users are still only allowed to be
owner
on one trial index. In effect, this means that each user can only create one index -
Available at
POST /beta/index
, the call accepts adisplay_name
anddescription
-
Indices created in this way are marked as trials and may be automatically deleted after a period of time. Contact support@globus.org to associate a trial index with your subscription and convert it to non-trial status
-
-
Globus Search has a new rate limit of 5 requests/second
-
Internal performance improvements
1.14.0
-
There is now a limit on the number of roles per index. No more than 50 roles may be created.
-
The
subject
field is now limited to 500 bytes (not characters)
-
Allow the use of a bare wildcard for an advanced query string, or as the right-hand side of a field expression. These expressions were removed in 1.13.0 and are being reintroduced here.
-
may only appear on its own, either as the full query or the right-hand-side of a field, as in
or
foo:*
-
-
A new role,
owner
, has been added to Search with all of the permissions ofadmin
-
Multiple users may have
owner
on an index. There is no limit on the number of owners other than the limit on total number of roles.
-
-
A new role deletion API is now available for index admins and owners for removing permissions for users (
DELETE /v1/index/<index_id>/role/<role_id>
)-
Roles may be deleted by role ID, retrieved via role listing
-
The last
owner
role on an index may not be deleted. Attempting to remove it will result in an error -
admin
users can otherwise deleteowner
roles andowner
users can deleteadmin
roles -
An
admin
orowner
user is permitted to remove their own permissions on an index
-
-
A new role creation API is now available for index admins and owners for adding permissions for users (
POST /v1/index/<index_id>/role
)-
Roles may be assigned to any valid principal URN, meaning any identity or group
-
Only users with
owner
permissions can createowner
roles -
Duplicate roles are not allowed
-
A trial index may only have one owner assigned.
owner
role creation is not allowed on these
-
-
Role responses from creation and role listing now include the role ID (for use in role delete)
-
Internal enhancements and robustness improvements
1.13.0
-
Remove support for API operations by
index_name
(deprecated behavior). All APIs now require the use of theindex_id
instead -
Remove support for "query templates" (unused feature)
-
The request payload limit has been changed to 10MB
-
A bad Authorization header will now always be rejected with an error, even when making an API call which does not require authentication.
-
Major improvements to advanced query parsing. New errors should help indicate which part of a large query was malformed.
-
The slash (
/
) character no longer needs to be escaped in advanced queries. This means thathttps\://foo:bar
is a valid search, equivalent to what previously had to be expressed ashttps\:\/\/foo:bar
-
-
Add new
/v1/index/<index_id>/role_list
API accessible to index admins-
Index writers cannot view the role list
-
Like
index_list
, this API requires theurn:globus:auth:scope:search.api.globus.org:all
scope
-
-
Add a new
/v1/index_list
API which lists indices on which you havewriter
oradmin
permissions-
Calls to
/v1/index_list
require theurn:globus:auth:scope:search.api.globus.org:all
scope
-
-
The set of date formats accepted and autodetected are now stricter to avoid incorrect date detection. See the doc on datatype mapping for details
-
Numerous internal enhancements!
1.12.0
-
Autogenerated documentation for Globus Search is now available. This documentation is subject to change as the API changes.
-
An openapi specification can be found at
https://search.api.globus.org/autodoc/openapi.json
-
The openapi spec is rendered at
https://search.api.globus.org/autodoc/redoc
-
-
A new API is added alongside
/search
called/scroll
-
Scrolling is not limited to 10,000 results, and can therefore be used for deep pagination
-
Scrolling does not support sorting, faceting, or boosting
-
This API uses marker-style pagination in which an opaque marker is returned on each request and can be used to request the next page of results
-
-
Sorted queries with will now always return results with a stable ordering, even when the sort criteria do not guarantee a stable sort
1.11.4
-
Improved validation for facets and filters in a number of cases. Facets of one type (e.g. terms) may not contain fields specific to another facet type (e.g. the histogram field for numeric histograms)
-
Improve performance on very large query results
1.11.2
-
Bad authentication data on queries now correctly produces a
401 Unauthenticated
response
-
New role based filtering of results using the
principal_sets
field-
Entry documents may now include a mapping,
principal_sets
, which lists collections of principal URNs -
You can filter queries with a new parameter,
filter_principal_sets
, which matches your identities and groups against theprincipal_sets
of various entries -
This mechanism can be used for cases like role-based filtering, e.g. listing
admins
of an object and asking forfilter_principal_sets=admins
-
-
bypass_visible_to
is now supported on Get Entry and Get Subject -
Type mismatches on ingest now produce more detailed error messages
-
If the type of an ingested field does not match the data in the index, Search will now attempt to produce a more useful error message in the failed task document
-
New data should be found in the
additional_details
field of a failing task
-
-
The internal
/unstable/
API has been renamed to/beta/
-
Internal stability enhancements
1.11.1
-
Deleting the last entry of a subject now correctly deletes the subject rather than leaving the subject in place but empty
1.11.0
-
Internal performance, robustness, and security improvements
-
Convert synchronous write operations into asynchronous tasks
-
delete-by-subject
,delete-by-entry-id
, anddelete-by-query
operations now all run asynchronously as tasks, which can be monitored just likeingest
tasks -
These operations have had their responses changed to return
task_id
. The standard successful response for a newly submitted task is{"acknowledged": true, "task_id": …}
-
The
delete-by-subject
anddelete-by-entry-id
results are encoded simply in the status of their relevant tasks asSUCCESS
orFAILED
-
The
delete-by-query
result, which shows the number of documents deleted, is now exposed through theadditional_details
field of the resulting task document onSUCCESS
-
delete-by-subject
anddelete-by-entry-id
return the field{"removed": true}
in all cases for backwards compatibility. This field is not meaningful and will be removed in a future release -
delete-by-query
returns the field{"num_subjects_deleted": 0}
in all cases for backwards compatibility. This field is not meaningful and will be removed in a future release
-
-
Task records now expire after 90 days — attempting to lookup a task more than 90 days after its completion date will return a 404
1.10.0
-
Fix an issue in which date histogram facets returned an extra, empty facet named
"meta"
-
Become strict on inputs and error on unknown fields and unknown parameters
-
This applies to query parameters and POST/PUT method bodies
-
Unexpected fields and unexpected parameters will cause validation errors, with an HTTP status of 400
-
-
This provides a safer development environment in which typos cannot lead to parameters being unintentionally ignored. For example,
/search?q=foo&limitt=1
will cause an error, rather than simply ignoring the malformed parameter,limitt
-
Added support for sum and avg metric facets.
-
-
These are requested by setting the facet’s
type
tosum
oravg
, and return numeric results forvalue
-
For
sum
andavg
facets, the additional fieldmissing
is supported, to define a value to be used for documents without the relevant field name. By default, missing values are ignored and do not count towardssum
oravg
1.9.1
-
Fix the enforcement of
visible_to
policies on facets when data is partially visible to the user-
If a single subject contained at least two entries, one visible to the user and one non-visible, facets returned results for the non-visible entry
-
Subjects which do not contain entries visible to a user were not visible by this method
-
The facet did not need to be on a field in the visible entry, so this method could have been used to discover the presence non-visible field names via a guess-and-check approach
-
1.9.0
-
Queries using filters without a query string will no longer produce errors
-
Improvements to input validation, ensuring that various inputs produce more consistent and better error messages
-
As a consequence of this change, some error messages have changed in format slightly
-
The following values for the
code
field have been removed: BadRequest.DocumentValidationError, BadRequest.UnsupportedDocumentVersion, BadRequest.UnexpectedDatatype, BadRequest.IncompleteDocument. Instead, any errors related to input validation will use BadRequest.ValidationError -
No HTTP status codes have changed. Validation errors are still HTTP 400s
-
-
Search will no longer accept connections using old SSL versions. TLSv1.2 or later is required, as a security measure
-
Internal security and stability improvements
1.8.0
-
Requests which have both invalid parameters and improper Authorization headers will more consistently get Unauthorized errors (HTTP 401), not Bad Request errors (HTTP 400)
-
Empty
GMetaList
ingest documents are now rejected with a validation error, including a message describing the cause
-
Backwards Incompatible: The default
result_format_version
has been changed in all contexts to2019-08-27
-
Search results now include a
has_next_page
field for easier pagination
1.7.2
-
Using non-RFC UUID variants in
<index_id>
fields will now be rejected with validation errors (HTTP 400)
1.7.1
-
Remove behavior which drops
null
and other nullary values. These will now propagate through correctly so that documents can containnull
.
1.7.0
-
Performance optimizations for repeated searches in a short window
-
Admins of an index may now bypass
visible_to
restrictions by settingbypass_visible_to=True
on their Searches-
In this mode, index admins may see all documents in an index, regardless of
visible_to
restrictions -
pass
bypass_visible_to=True
in a GET search or set"bypass_visible_to": true
in a POST search -
this capability is not available on non-query APIs (e.g. get-by-subject)
-
-
Queries may now set
result_format_version=2019-08-27
in order to get results in a new format-
This parameter changes the format of
GMetaResult
documents. Details on the two format versions are provided in theGMetaResult
documentation -
The
result_format_version
parameter is also available on Get-By-Subject and Get-By-EntryID operations -
In a future release, this behavior will become the default, but you will be able to ensure you continue to get results in the current format if you start passing
result_format_version=2017-09-01
-
In the long term, the
2017-09-01
result format will be deprecated and removed
-
-
Remove deprecated resource_type parameter
1.6.0
-
Significant improvements to internal handling of Ingest Tasks
-
Overall Task throughput has been improved
-
Tasks will no longer take a long time to fail when they mismatch the underlying schema
-
Task processing order has been improved to treat Indices more fairly
-
1.5.0
-
Ingesting fields over 32 KB in size will be rejected with an HTTP 400, rather than queuing as tasks which will ultimately fail
-
New JSONSchema validation can be set (by a service administrator) on an index
-
Schema validation is applied during ingest request processing and accepts or rejects documents at that time
-
Documents passing schema validation may later fail due to type mismatches if the detected underlying field type does not match the schema specification
-
1.4.3
-
Ingest document sizes over 10MB are now caught as errors immediately and trigger and HTTP 400 response instead of queuing as tasks which will ultimately fail
1.4.1
-
null
in amatch_any
ormatch_all
filter causes a validation error (HTTP 400)
-
Accelerate handling of ingest payloads smaller than 5MB
1.4.0
-
GMetaResult documents include a new field,
entry_ids
, containing the array of entry IDs for the elements of thecontent
array-
For any index
i
, the value atentry_ids[i]
is the entry ID forcontent[i]
-
This "unzipped" representation of
entry_ids
was chosen to avoid making backwards-incompatible changes in the response format.
-
1.3.2
-
Sorting on nonexistent fields gives accurate error
-
Fix errors on certain malformed range queries
1.3.0
-
Timeout errors were incorrectly classified as 502. This is corrected and they are now returned as HTTP 504 errors
-
Certain range filters were mishandled and resulted in errors
-
Histogram bucketing facets on text-type fields now produces a better error
-
Major documentation refresh
-
Add the new Task API which supports getting a task and a list of tasks
-
/v1/task/<task_id>
gets a current Task document. To make this call, you must have permissions to ingest data into the index which is referred to by the task -
/v1/task_list/<index_id>
gets a list of the 1000 most recent Tasks which were started against an index
-
-
The Ingest API no longer attempts to synchronously write data to an index, but returns a
task_id
handle for the asynchronous background task-
Clients which depended on the
num_documents_ingested
field on ingest will now find that it always has a value of0
-
A successful return from an ingest API call no longer guarantees that data was written to the index successfully — callers must now check the status of the generated Task using the new Task API
-
1.2.6
-
NaN
,Infinity
, and-Infinity
are now rejected with an informative 400-class error, as they cannot be stored in Globus Search as Float values
-
Error documents now include the
request_id
for better troubleshooting. Please include therequest_id
when reporting unexpected errors
1.2.3
-
Numeric histograms with bad ranges correctly result in 400 errors
-
Handle malformed dates which failed parsing
1.2.0
-
Fix Group membership checks to include full identity set
-
Unauthed use of restricted APIs no longer produces (incorrect) 403s, but 401s instead
-
Index Locking. When data is being reindexed by Search (e.g. because of a requested update to schema information), the index will now enter a Locked state.
-
Previously, writes were allowed but had a risk of being discarded by the reindex operation.
-
While an index is Locked, attempts to write to it will return 409 Conflict Errors. Any impacted operations have had their documentation pages updated.
-
-
Unicode-aware Sorting. Sorts on text fields containing non-ascii characters should now better reflect typical character orderings.
-
This supports all unicode text fields.
-
There are known cases where language-agnostic unicode sorting differs from typical phonebook ordering for a specific language. These are not bugs in Search.
-
1.1.1
-
In certain situations, Index IDs were not being treated equivalently to Index Names for permissions checks. Using Index IDs should now work correctly for APIs which incorrectly returned 403 errors.
1.1.0
-
Add support for Delete-by-Query operations
-
Delete-by-Query requires
admin
privileges -
This operation can delete documents which are not visible to the caller, so it should be used with great care. Please read the documentation carefully before using
-
-
All indices are now reachable using their Index ID value in place of the
<index_name>
— this is now the preferred method of reaching an index-
All operations will continue to work normally with the current
index_name
values -
Simply
GET /v1/index/<index_name>
and look at the resulting Index ID value to get the ID of an index for which you know the name. At the bottom of these notes, we provide an example of doing this -
In a future version, we plan to remove the uniqueness constraint on
index_name
and make it an editable display name field for indices. At that time it will cease to be possible to resolve anindex_name
to anindex_id
value
-
-
A new namespace has been added to Globus Search under
/unstable/
(as opposed to/v1/
). Such APIs will not be included in our documentation or release notes, and may change without warning. They are for internal use only.
1.0.1
-
Fix the advanced query parsing’s handling of spaces in parenthesized expressions. The bugfix in v1.0.0 introduced failures on expressions like
foo ( bar)
and(foo ) bar
. These should now parse correctly
1.0.0
-
Fix the advanced query parsing’s handling of operators applied to parenthesized expressions. Expressions like
foo (bar baz)^2
should now parse correctly
0.4.1
-
Fix the handling of operators inside of field values in advanced query parsing. Expressions like
foo:(bar && baz)
should now parse correctly
-
Enforce size limits on indices — each index is now limited to a total size
-
If your quota is too low, please contact us about raising it
-
All current indices should be well within their quotas
-
If you fill your quota, you may notice that your usage may mildly exceed your stated quota. This is not a bug. Search can’t accurately evaluate the storage cost of documents until they are stored, so quota enforcement is done by checking if you have exceeded your quota.
-
-
Add an API endpoint for getting data about indices, including their current quota and usage
-
This is a simple GET call which returns a GSearchIndex document
-
0.4.0
-
GMetaEntry.visible_to
is now required to only contain "public" or Principal URNs-
Other values will cause 400 BadRequest errors due to a malformed document
-
-
Users are no longer prevented from writing/deleting one another’s
GMetaEntry
documents-
If two users,
Bob
andAlice
, both ingestGMetaEntry
documents with the samesubject
andid
values (missing ornull
values included), the last write will win! Only one document will be created. Previously, one document would be created for each user
-
-
GMetaEntry.id
values may no longer contain the character !. We have plans to give this character special meaning in the future, and are considering it a reserved character in this specific context henceforth
0.3.0
-
No longer works with
datasearch-client
versions 0.1.0 and lower. Please ensure that if you are using thesearch-client
, you are using v0.2.0 of that library.-
The
search-client
was renamed in v0.2.0 fromdatasearch-client
, which is why both names are written here.
-
search-client
do not, and are not meant to, match
the versions of the Search API. Any similarities in version numbers are purely
incidental.
-
Drop support for calls to
/v1/<index_name>/*
. Calls to index-oriented APIs (Query, Ingest, Entry Operations) must always be written as/v1/index/<index_name>/*
. This was the preferred convention referred to in v0.2.0 -
Support for the
urn:globus:auth:scope:datasearch.api.globus.org:all
scope, deprecated in v0.2.0, is being dropped.
-
Sorting and Faceting on long field contents now works
-
We have repaired a bug regarding support for long field values. This applies to the contents of single fields, not the depth or length of their field names. i.e. In the document {"a": "b"}, this refers to "b".
-
Values longer than 10000 characters will not be included in Facet results. They are also considered "last" by Sorting, regardless of their "true" sort ordering.
-
-
New Preferred Syntax for
visible_to
. Values invisible_to
other than "public" should now be qualified in the Principal URN format.-
Existing
visible_to
entries have been upgraded, so you do not need to reindex your data.
-
-
Begin renaming resource_type to query_template. We feel this name more accurately represents the meaning/usage of this parameter. The current changes are carefully kept backwards compatible, but we recommend transitioning all usage to the newer forms.
-
Add new parameter, query_template which is a rename of resource_type to GET /v1/<index_name>/search. We recommend starting to use query_template for GET-style searches, as resource_type will be dropped in an upcoming release
-
Add a new @version for GSearchRequest documents, 2017-09-01. We intend to drop support for the 2016-11-09 versioned documents in a future release
-
GSearchRequest version 2017-09-01 takes query_template as an attribute, in lieu of resource_type
-
Unversioned GSearchRequest documents currently are treated as version 2016-11-09. We will change this in a future release
-
-
Add a new APIs for fetching Query Templates These are unauthenticated; query template contents are considered publicly readable.
-
GET /index/<index_name>/query_template/<template_name> can be used to lookup an existing query template.
-
GET /index/<index_name>/query_template can be used to get a list of query templates associated with an index.
-
-
Numerous enhancements to error output for debugging purposes
-
Internal robustness and stability improvements
0.2.0
-
Drop support for calls to
/v1/search
and/v1/ingest
. Calls now must always be qualified with a relevant index name. The preferred new form is/v1/index/<index_name>/search
and/v1/index/<index_name>/ingest
. -
A number of conditions which caused malformed advanced-mode queries to trigger 500-class errors now produce (more correct) 400-class errors
-
Advanced mode queries now require that the following characters be escaped with a preceding
\
character in fieldnames:.:+-()*\/
Additionally, spaces must be backslash-escaped -
Any documents specifying a fieldname for use must escape any dots contained in the fieldname. No other special characters should be escaped, ONLY
.
. This applies to GBoost, GFacet, GFilter, GSort
-
Advanced mode queries support the use of
.
as a path separator. Given the document
{ "a": { "b": 1 }, "a.b": 2 }
we take a.b
to refer to the value 1, and a\.b
to refer to the value 2.
-
Documents specifying fieldnames can use
.
as a path separator, with the same meaning as in advanced queries -
Add sorting functionality to structured queries, using the new GSort document type within the GSearchRequest document.
-
Add new Entry Operations APIs and Subject Operations APIs
-
Includes support for deletion of metadata, requiring only that you are allowed to index data — no new permissions control these operations yet
-
-
Fieldnames are no longer required to be URIs. Any JSON document is now a valid GMetaContent document
-
Add new documentation pages, which we will be updating regularly
-
Add support for new scope names,
urn:globus:auth:scope:search.api.globus.org:all
,urn:globus:auth:scope:search.api.globus.org:search
,urn:globus:auth:scope:search.api.globus.org:ingest
-
The
…:search
scope can only be used for Searches — not for Ingesting data or the new entry and subject operations -
The
…:ingest
scope can only be used for ingesting and the new entry and subject operations, not for Searches -
urn:globus:auth:scope:datasearch.api.globus.org:all
is still supported, but considered deprecated. It will be supported at least until version 0.3.0, but you should begin moving off of it
-
-
Internal stability and security fixes
-
Internal changes and bugfixes to data storage layer
-
Simplify several error messages and make them clearer