devicehub-django/evidence/xapian.py

52 lines
1.3 KiB
Python
Raw Normal View History

2024-07-15 14:23:14 +00:00
import xapian
2024-07-18 15:21:22 +00:00
# database = xapian.WritableDatabase("db", xapian.DB_CREATE_OR_OPEN)
2024-07-15 14:23:14 +00:00
2024-07-18 15:21:22 +00:00
# Read Only
# database = xapian.Database("db")
# indexer = xapian.TermGenerator()
# stemmer = xapian.Stem("english")
# indexer.set_stemmer(stemmer)
2024-07-15 14:23:14 +00:00
def search(qs, offset=0, limit=10):
2024-07-18 15:21:22 +00:00
database = xapian.Database("db")
2024-07-15 14:23:14 +00:00
qp = xapian.QueryParser()
qp.set_database(database)
2024-07-18 15:21:22 +00:00
qp.set_stemmer(xapian.Stem("english"))
2024-07-15 14:23:14 +00:00
qp.set_stemming_strategy(xapian.QueryParser.STEM_SOME)
2024-07-18 15:21:22 +00:00
qp.add_prefix("uuid", "uuid")
# qp.add_prefix("snapshot", "snapshot")
query = qp.parse_query(qs)
2024-07-15 14:23:14 +00:00
enquire = xapian.Enquire(database)
enquire.set_query(query)
matches = enquire.get_mset(offset, limit)
return matches
2024-07-18 15:21:22 +00:00
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)