import xapian # database = xapian.WritableDatabase("db", xapian.DB_CREATE_OR_OPEN) # Read Only # database = xapian.Database("db") # indexer = xapian.TermGenerator() # stemmer = xapian.Stem("english") # indexer.set_stemmer(stemmer) def search(qs, offset=0, limit=10): database = xapian.Database("db") qp = xapian.QueryParser() qp.set_database(database) qp.set_stemmer(xapian.Stem("english")) qp.set_stemming_strategy(xapian.QueryParser.STEM_SOME) qp.add_prefix("uuid", "uuid") # qp.add_prefix("snapshot", "snapshot") query = qp.parse_query(qs) enquire = xapian.Enquire(database) enquire.set_query(query) matches = enquire.get_mset(offset, limit) return matches def index(uuid, snap): uuid = 'uuid:"{}"'.format(uuid) try: matches = search(uuid, limit=1) if matches.size() > 0: return except xapian.DatabaseNotFoundError: pass database = xapian.WritableDatabase("db", xapian.DB_CREATE_OR_OPEN) indexer = xapian.TermGenerator() stemmer = xapian.Stem("english") indexer.set_stemmer(stemmer) doc = xapian.Document() doc.set_data(snap) indexer.set_document(doc) indexer.index_text(snap) indexer.index_text(uuid, 10, "uuid") # indexer.index_text(snap, 1, "snapshot") database.add_document(doc)