def do_search(self): if self.is_evaluated: return body = self.make_search_body() if self.facets_fields: aggs = dict([ (field, {'terms': {'field': field}}) for field in self.facets_fields ]) if self.facets_limit: aggs[field]['terms']['size'] = self.facets_limit if self.global_facets: aggs = {'global_count': {'global': {}, 'aggs': aggs}} body['aggs'] = aggs if self.suggest_fields: suggest = {} for field_name in self.suggest_fields: suggest[field_name] = {"text": self._query, "term": {"field": field_name}} if self.suggest_limit: suggest[field_name]["term"]["size"] = self.suggest_limit body['suggest'] = suggest if self.ordering: body['sort'] = [{f: "asc"} if f[0] != '-' else {f[1:]: "desc"} for f in self.ordering] + ["_score"] search_params = { 'index': self.index, 'doc_type': self.doc_type } if self._start: search_params['from'] = self._start if self._stop: search_params['size'] = self._stop - self._start if self.extra_body: body.update(self.extra_body) search_params['body'] = body self._body = body if self.mode == self.MODE_MLT: # change include's defaults to False search_params['include'] = self.mlt_kwargs.pop('include', False) # update search params names search_params.update(self.mlt_kwargs) for param in ['type', 'indices', 'types', 'scroll', 'size', 'from']: if param in search_params: search_params['search_{0}'.format(param)] = search_params.pop(param) r = es_client.mlt(**search_params) else: if 'from' in search_params: search_params['from_'] = search_params.pop('from') r = es_client.search(**search_params) self._response = r if self.facets_fields: if self.global_facets: self._facets = r['aggregations']['global_count'] else: self._facets = r['aggregations'] self._suggestions = r.get('suggest') if self._deserialize: self._result_cache = [self.model.es.deserialize(e['_source']) for e in r['hits']['hits']] else: self._result_cache = [e['_source'] for e in r['hits']['hits']] self._max_score = r['hits']['max_score'] self._total = r['hits']['total'] return
def do_search(self, extra_body=None): if self.is_evaluated: return self._result_cache print "do_search" body = self.make_search_body() if self.facets_fields: aggs = dict([(field, { 'terms': { 'field': field } }) for field in self.facets_fields]) if self.facets_limit: aggs[field]['terms']['size'] = self.facets_limit if self.global_facets: aggs = {'global_count': {'global': {}, 'aggs': aggs}} body['aggs'] = aggs if self.suggest_fields: suggest = {} for field_name in self.suggest_fields: suggest[field_name] = { "text": self._query, "term": { "field": field_name } } if self.suggest_limit: suggest[field_name]["text"]["term"][ "size"] = self.suggest_limit body['suggest'] = suggest if self.ordering: if not len(body.get('sort', [])): body['sort'] = [] body['sort'].extend([{ f: "asc" } if f[0] != '-' else { f[1:]: "desc" } for f in self.ordering] + ["_score"]) search_params = {'index': self.index, 'doc_type': self.doc_type} if self._start: search_params['from'] = self._start if self._stop: search_params['size'] = self._stop - self._start search_params['body'] = body self._body = body # print search_params # print body if self.mode == self.MODE_MLT: # change include's defaults to False # search_params['include'] = self.mlt_kwargs.pop('include', False) # update search params names for param in [ 'type', 'indices', 'types', 'scroll', 'size', 'from' ]: if param in search_params: search_params['search_{0}'.format( param)] = search_params.pop(param) search_params.update(self.mlt_kwargs) r = es_client.mlt(**search_params) else: if 'from' in search_params: search_params['from_'] = search_params.pop('from') r = es_client.search(**search_params) self._response = r if self.facets_fields: if self.global_facets: try: self._facets = r['aggregations']['global_count'] except KeyError: self._facets = {} else: self._facets = r['aggregations'] self._suggestions = r.get('suggest') if self.lat is not None and self.lng is not None: for e in r['hits']['hits']: e['_source']['distance'] = haversine(self.lng, self.lat, e['_source']['lng'], e['_source']['lat']) self._result_cache = [e['_source'] for e in r['hits']['hits']] self._max_score = r['hits']['max_score'] self._total = r['hits']['total'] return self
def do_search(self, extra_body=None): if self.is_evaluated: return self._result_cache body = self.make_search_body() if self.facets_fields: aggs = dict([(field, {"terms": {"field": field}}) for field in self.facets_fields]) if self.facets_limit: aggs[field]["terms"]["size"] = self.facets_limit if self.global_facets: aggs = {"global_count": {"global": {}, "aggs": aggs}} body["aggs"] = aggs if self.suggest_fields: suggest = {} for field_name in self.suggest_fields: suggest[field_name] = {"text": self._query, "term": {"field": field_name}} if self.suggest_limit: suggest[field_name]["term"]["size"] = self.suggest_limit body["suggest"] = suggest if self.ordering: body["sort"] = [{f: "asc"} if f[0] != "-" else {f[1:]: "desc"} for f in self.ordering] + ["_score"] search_params = {"index": self.index, "doc_type": self.doc_type} if self._start: search_params["from"] = self._start if self._stop: search_params["size"] = self._stop - self._start search_params["body"] = body self._body = body if self.mode == self.MODE_MLT: # change include's defaults to False search_params["include"] = self.mlt_kwargs.pop("include", False) # update search params names search_params.update(self.mlt_kwargs) for param in ["type", "indices", "types", "scroll", "size", "from"]: if param in search_params: search_params["search_{0}".format(param)] = search_params.pop(param) r = es_client.mlt(**search_params) else: if "from" in search_params: search_params["from_"] = search_params.pop("from") r = es_client.search(**search_params) self._response = r if self.facets_fields: if self.global_facets: self._facets = r["aggregations"]["global_count"] else: self._facets = r["aggregations"] self._suggestions = r.get("suggest") if self._deserialize: self._result_cache = [self.model.es.deserialize(e["_source"]) for e in r["hits"]["hits"]] else: self._result_cache = [e["_source"] for e in r["hits"]["hits"]] self._max_score = r["hits"]["max_score"] self._total = r["hits"]["total"] return self
def do_search(self, extra_body=None): if self.is_evaluated: return self._result_cache print "do_search" body = self.make_search_body() if self.facets_fields: aggs = dict([ (field, {'terms': {'field': field}}) for field in self.facets_fields ]) if self.facets_limit: aggs[field]['terms']['size'] = self.facets_limit if self.global_facets: aggs = {'global_count': {'global': {}, 'aggs': aggs}} body['aggs'] = aggs if self.suggest_fields: suggest = {} for field_name in self.suggest_fields: suggest[field_name] = {"text": self._query, "term": {"field": field_name}} if self.suggest_limit: suggest[field_name]["text"]["term"]["size"] = self.suggest_limit body['suggest'] = suggest if self.ordering: if not len(body.get('sort', [])): body['sort'] = [] body['sort'].extend([{f: "asc"} if f[0] != '-' else {f[1:]: "desc"} for f in self.ordering] + ["_score"]) search_params = { 'index': self.index, 'doc_type': self.doc_type } if self._start: search_params['from'] = self._start if self._stop: search_params['size'] = self._stop - self._start search_params['body'] = body self._body = body # print search_params # print body if self.mode == self.MODE_MLT: # change include's defaults to False # search_params['include'] = self.mlt_kwargs.pop('include', False) # update search params names for param in ['type', 'indices', 'types', 'scroll', 'size', 'from']: if param in search_params: search_params['search_{0}'.format(param)] = search_params.pop(param) search_params.update(self.mlt_kwargs) r = es_client.mlt(**search_params) else: if 'from' in search_params: search_params['from_'] = search_params.pop('from') r = es_client.search(**search_params) self._response = r if self.facets_fields: if self.global_facets: try: self._facets = r['aggregations']['global_count'] except KeyError: self._facets = {} else: self._facets = r['aggregations'] self._suggestions = r.get('suggest') if self.lat is not None and self.lng is not None: for e in r['hits']['hits']: e['_source']['distance'] = haversine(self.lng, self.lat, e['_source']['lng'], e['_source']['lat']) self._result_cache = [e['_source'] for e in r['hits']['hits']] self._max_score = r['hits']['max_score'] self._total = r['hits']['total'] return self