in elasticsearch/dsl/search_base.py [0:0]
def to_dict(self, count: bool = False, **kwargs: Any) -> Dict[str, Any]:
"""
Serialize the search into the dictionary that will be sent over as the
request's body.
:arg count: a flag to specify if we are interested in a body for count -
no aggregations, no pagination bounds etc.
All additional keyword arguments will be included into the dictionary.
"""
d = {}
if self.query:
d["query"] = recursive_to_dict(self.query)
if self._knn:
if len(self._knn) == 1:
d["knn"] = self._knn[0]
else:
d["knn"] = self._knn
if self._rank:
d["rank"] = self._rank
# count request doesn't care for sorting and other things
if not count:
if self.post_filter:
d["post_filter"] = recursive_to_dict(self.post_filter.to_dict())
if self.aggs.aggs:
d.update(recursive_to_dict(self.aggs.to_dict()))
if self._sort:
d["sort"] = self._sort
if self._collapse:
d["collapse"] = self._collapse
d.update(recursive_to_dict(self._extra))
if self._source not in (None, {}):
d["_source"] = self._source
if self._highlight:
d["highlight"] = {"fields": self._highlight}
d["highlight"].update(self._highlight_opts)
if self._suggest:
d["suggest"] = self._suggest
if self._script_fields:
d["script_fields"] = self._script_fields
d.update(recursive_to_dict(kwargs))
return d