def _wrap(*args, **kwargs): if key: mc_key = key else: mc_key = "%s:%s-%s-%s" % ("cached", fn.func_name, "|".join( [unicode2str(arg) for arg in args]), "|".join([ "%s:%s" % (unicode2str(n), unicode2str(v)) for n, v in kwargs.items() ])) result = mc_client.get(mc_key) if result is not None: result = pickle.loads(result) else: result = fn(*args, **kwargs) try: mc_client.set(mc_key, pickle.dumps(result), time=expiration) except ValueError: pass return result
def get_value(self, name): stat_json = json.loads(self.kvdb.get(self._fpath(name))) blocks = stat_json['blocks'] data = StringIO() for block_path in blocks: block_path = unicode2str(block_path) data.write(self.kvdb.get(block_path)) value = data.getvalue() return value
def search(self, query_string, start=0, limit=10): """关键词搜索 Args: query_string: str or unicode 搜索关键词 start: int 起始位置 limit: int 最大个数 Returns: results: [] 形式如下:[{"news_id": 23, "title": "<mark>中国</mark>公惨淡", "content": "<mark>中国</mark>人民名住..."}, {...}] Raises: AliSearchError: 如果搜索发生错误 """ # 构造uri url = "%s/search" % self._uri query_string = unicode2str(query_string) words = re.compile("\s+").split(query_string) # 构造参数 params = { "query": "config=start:%s,hit:%s&&query=%s" % (start, limit, " OR ".join(words)), "index_name": self._app, "summary": "summary_field:content,summary_element:mark," "summary_len:300;summary_field:title,summary_element:mark", } # 请求 r = request("GET", url, self._access_key, self._access_secret, params) results = [] total_count = int(r['result']['total']) for item in r['result']['items']: results.append({ "news_id": unicode2str(item['news_id']), "title": unicode2str(item['title']), "content": unicode2str(item['content']), }) return LazyCollection(results, total_count)
def _wrap(*args, **kwargs): if key: mc_key = key else: mc_key = "%s:%s-%s-%s" % ( "cached", fn.func_name, "|".join([unicode2str(arg) for arg in args]), "|".join(["%s:%s" % (unicode2str(n), unicode2str(v)) for n, v in kwargs.items()])) result = mc_client.get(mc_key) if result is not None: result = pickle.loads(result) else: result = fn(*args, **kwargs) try: mc_client.set(mc_key, pickle.dumps(result), time=expiration) except ValueError: pass return result
def search(self, query_string, start=0, limit=10): # 构造uri url = "%s/search" % self.uri query_string = unicode2str(query_string) words = re.compile("\s+").split(query_string) # 构造参数 params = { "query": "config=start:%s,hit:%s&&query=%s" % (start, limit, " OR ".join(words)), "index_name": self.app, "summary": "summary_field:content,summary_element:mark," "summary_len:300;summary_field:title,summary_element:mark", } # 请求 r = request("GET", url, self.access_key, self.access_secret, params) results = [] total_count = int(r['result']['total']) for item in r['result']['items']: results.append({ "news_id": unicode2str(item['news_id']), "title": unicode2str(item['title']), "content": unicode2str(item['content']), }) return LazyCollection(results, total_count)
def _fpath(self, name): name = unicode2str(name) return os.path.join(self.fpath, name)
def __init__(self, fpath): self.fpath = unicode2str(fpath) self.kvdb = sae.kvdb.KVClient()