def zsite2keyword(z): r = [] t = defaultdict(int) id = z.id name = z.name if name: for word in seg_title_search(name): t[word] += 2 url = url_by_id(id) if url: t[url] += 2 if z.cid == CID_SITE: for word in seg_title_search(motto_get(id)): t[word] += 1 elif z.cid == CID_USER: mail = mail_by_user_id(id) if mail: t[mail] += 2 t[mail.split('@', 1)[0]] += 2 txt = txt_get(id) if txt: man_txt_len = len(txt) for word in seg_txt_search(txt): t[word] += 1 for seq, career in enumerate(career_list_all(id)): if seq: add = 1 else: add = 2 unit = career.unit title = career.title txt = career.txt if unit: for word in seg_title_search(unit): t[word] += add if title: for word in seg_title_search(title): t[word] += add if txt: for word in seg_txt_search(txt): t[word] += add return t
def search(querystring, offset=0, pagesize=QUERY_PAGESIZE, enquire=SEARCH_ENQUIRE): # split querystring, get query query_list = [] # parse query string items = defaultdict(int) for word in seg_title_search(querystring): items[word] += 1 # get query for word, value in items.iteritems(): query_item = xapian.Query(word, value) query_list.append(query_item) if 0 == len(query_list): return None elif len(query_list) != 1: query = xapian.Query(xapian.Query.OP_OR, query_list) else: query = query_list[0] # start to search enquire.set_query(query) matches = enquire.get_mset(offset, pagesize, None) return matches