def __init__(self, catalog, xquery): self._catalog = catalog self._xquery = xquery # Enquire enquire = Enquire(catalog._db) enquire.set_query(xquery) self._enquire = enquire # Max max = enquire.get_mset(0, 0).get_matches_upper_bound() self._max = enquire.get_mset(0, max).size()
def find(self, query): offset = query.pop('offset', 0) limit = query.pop('limit', MAX_QUERY_LIMIT) order_by = query.pop('order_by', []) query_string = query.pop('query', None) query_parser = QueryParser() query_parser.set_database(self._database) enquire = Enquire(self._database) enquire.set_query(query_parser.parse_query(query, query_string)) # This will assure that the results count is exact. check_at_least = offset + limit + 1 if not order_by: order_by = '+timestamp' else: order_by = order_by[0] if order_by == '+timestamp': enquire.set_sort_by_value(_VALUE_TIMESTAMP, True) elif order_by == '-timestamp': enquire.set_sort_by_value(_VALUE_TIMESTAMP, False) elif order_by == '+title': enquire.set_sort_by_value(_VALUE_TITLE, True) elif order_by == '-title': enquire.set_sort_by_value(_VALUE_TITLE, False) elif order_by == '+filesize': enquire.set_sort_by_value(_VALUE_FILESIZE, True) elif order_by == '-filesize': enquire.set_sort_by_value(_VALUE_FILESIZE, False) elif order_by == '+creation_time': enquire.set_sort_by_value(_VALUE_CREATION_TIME, True) elif order_by == '-creation_time': enquire.set_sort_by_value(_VALUE_CREATION_TIME, False) else: logging.warning('Unsupported property for sorting: %s', order_by) query_result = enquire.get_mset(offset, limit, check_at_least) total_count = query_result.get_matches_estimated() uids = [] for hit in query_result: uids.append(hit.document.get_value(_VALUE_UID)) return (uids, total_count)
def get_docs(db): enquire = Enquire(db) enquire.set_query(Query('')) docs_max = enquire.get_mset(0, 0).get_matches_upper_bound() return [doc.get_document() for doc in enquire.get_mset(0, docs_max)]
def _enquire(self): enquire = Enquire(self._catalog._db) enquire.set_query(self._xquery) return enquire