def _get_items(self, arg=None): """Search the FTS database for query. :returns: all items that match query :rtype: :class:`list` """ query = self.arg if arg is None else arg # Prepare proper `sqlite` query for individual items sql = self._make_items_query(query) log.info('Item sqlite query :\n\t\t\t{}'.format(sql.strip())) # Search against either Unicode or ASCII database db = self.zotquery.folded_sqlite if not isascii(query): db = self.zotquery.fts_sqlite log.info('Connecting to : `{}`'.format(db.split('/')[-1])) con = sqlite3.connect(db) # Prepare ranking weights (all columns equal weight) ranks = [1.0] * len(config.FILTERS['general']) with con: # Generate ranking function con.create_function('rank', 1, self.zotquery.make_rank_func(ranks)) # Query FTS database and get result keys results = self._do_sqlite(con, sql) log.info('Number of results : {}'.format(len(results))) return results
def _get_in_group(self, group): """Get keys for all items that match query. :param group: name of stored group :type group: :class:`unicode` :returns: item keys :rtype: :class:`list` """ # Prepare proper `sqlite` query for searching in Zotero groups sql = self._make_in_group_query(group) log.info('In-Group sqlite query: {}'.format(sql.strip())) # Search against either Unicode or ASCII database if not isascii(self.arg): db = self.zotquery.fts_sqlite else: db = self.zotquery.folded_sqlite log.info('Connecting to: {}'.format(db)) con = sqlite3.connect(db) with con: # Query FTS database and get result keys results = self._do_sqlite(con, sql) log.info('Number of results : {}'.format(len(results))) return results
def get_fts_db(query): # Search against either Unicode or ASCII database db = zq.backend.folded_sqlite if not isascii(query): db = zq.backend.fts_sqlite return db