Source code for globus_sdk.search.query
[docs]class SearchQuery(dict):
"""
A specialized dict which has helpers for creating and modifying a Search
Query document.
Example usage:
>>> from globus_sdk import SearchClient, SearchQuery
>>> sc = SearchClient(...)
>>> index_id = ...
>>> query = (SearchQuery(q='example query')
>>> .set_limit(100).set_offset(10)
>>> .add_filter('path.to.field1', ['foo', 'bar']))
>>> result = sc.post_search(index_id, query)
"""
def set_query(self, query):
self["q"] = query
return self
def set_limit(self, limit):
self["limit"] = limit
return self
def set_offset(self, offset):
self["offset"] = offset
return self
def set_advanced(self, advanced):
self["advanced"] = advanced
return self
def add_facet(
self,
name,
field_name,
type="terms",
size=None,
date_interval=None,
histogram_range=None,
**kwargs
):
self["facets"] = self.get("facets", [])
facet = {"name": name, "field_name": field_name, "type": type}
facet.update(kwargs)
if size is not None:
facet["size"] = size
if date_interval is not None:
facet["date_interval"] = date_interval
if histogram_range is not None:
low, high = histogram_range
facet["histogram_range"] = {"low": low, "high": high}
self["facets"].append(facet)
return self
def add_filter(self, field_name, values, type="match_all", **kwargs):
self["filters"] = self.get("filters", [])
new_filter = {"field_name": field_name, "values": values, "type": type}
new_filter.update(kwargs)
self["filters"].append(new_filter)
return self
def add_boost(self, field_name, factor, **kwargs):
self["boosts"] = self.get("boosts", [])
boost = {"field_name": field_name, "factor": factor}
boost.update(kwargs)
self["boosts"].append(boost)
return self
def add_sort(self, field_name, order=None, **kwargs):
self["sort"] = self.get("sort", [])
sort = {"field_name": field_name}
sort.update(kwargs)
if order is not None:
sort["order"] = order
self["sort"].append(sort)
return self