def _build_query(self, query_dict, limit=None, offset=None, shards=None): if shards is not None: if self._available_shards is None: self._load_available_shards() shard_specs = [] for shard in shards: if shard not in self._available_shards: raise EsgfSearchException('Shard %s is not available' % shard) else: for port, suffix in self._available_shards[shard]: # suffix should be ommited when querying shard_specs.append('%s:%s/solr' % (shard, port)) shard_str = ','.join(shard_specs) else: shard_str = None full_query = MultiDict({ 'format': RESPONSE_FORMAT, 'limit': limit, 'distrib': 'true' if self.distrib else 'false', 'offset': offset, 'shards': shard_str, }) full_query.extend(query_dict) # Remove all None valued items full_query = MultiDict(item for item in full_query.items() if item[1] is not None) return full_query
def send_query(self, query_dict, limit=None, offset=None): """ Generally not to be called directly by the user but via SearchContext instances. :param query_dict: dictionary of query string parameers to send. :return: ElementTree instance (TODO: think about this) """ full_query = MultiDict({ 'format': RESPONSE_FORMAT, 'limit': limit, 'distrib': 'true' if self.distrib else 'false', 'offset': offset, 'shards': ','.join(self.shards) if self.shards else None, }) full_query.extend(query_dict) # Remove all None valued items full_query = MultiDict(item for item in full_query.items() if item[1] is not None) query_url = '%s?%s' % (self.url, urllib.urlencode(full_query)) log.debug('Query request is %s' % query_url) response = urllib2.urlopen(query_url) ret = json.load(response) return ret
def _build_query(self): """ Build query string parameters as a dictionary. """ query_dict = MultiDict({"query": self.freetext_constraint, "type": self.search_type, "latest": self.latest, "facets": self.facets, "fields": self.fields, "replica": self.replica, }) query_dict.extend(self.facet_constraints) #!TODO: encode datetime #start, end = self.temporal_constraint #query_dict.update(start=start, end=end) return query_dict
def _build_query(self): """ Build query string parameters as a dictionary. """ query_dict = MultiDict({ "query": self.freetext_constraint, "type": self.search_type, "latest": self.latest, "facets": self.facets, "fields": self.fields, "replica": self.replica, }) query_dict.extend(self.facet_constraints) #!TODO: encode datetime start, end = self.temporal_constraint query_dict.update(start=start, end=end) return query_dict