def search_by_product(self, **query):
    '\n        Perform a search, returning datasets grouped by product type.\n\n        :param dict[str,str|float|datacube.model.Range] query:\n        :rtype: __generator[(datacube.model.DatasetType,  __generator[datacube.model.Dataset])]]\n        '
    for (dataset_type, datasets) in self._do_search_by_product(query):
        (yield (dataset_type, self._make_many(datasets)))
Perform a search, returning datasets grouped by product type.

:param dict[str,str|float|datacube.model.Range] query:
:rtype: __generator[(datacube.model.DatasetType,  __generator[datacube.model.Dataset])]]
def search_by_product(self, **query):
    '\n        Perform a search, returning datasets grouped by product type.\n\n        :param dict[str,str|float|datacube.model.Range] query:\n        :rtype: __generator[(datacube.model.DatasetType,  __generator[datacube.model.Dataset])]]\n        '
    for (dataset_type, datasets) in self._do_search_by_product(query):
        (yield (dataset_type, self._make_many(datasets)))