1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
#!/usr/bin/python
import os
import sys
import xapian
sys.path.insert(0, "../")
from softwarecenter.enums import XAPIAN_VALUE_PKGNAME, XAPIAN_VALUE_APPNAME
from softwarecenter.paths import XAPIAN_BASE_PATH
from softwarecenter.utils import ExecutionTime
def run_benchmark(db):
# test postlist
with ExecutionTime('postlist("")'):
for m in db.postlist(""):
pass
# test postlist + get_document
with ExecutionTime('postlist+get_document'):
for m in db.postlist(""):
doc = db.get_document(m.docid)
# test postlist + get_document
with ExecutionTime('postlist+get_document+get_value'):
for m in db.postlist(""):
doc = db.get_document(m.docid)
doc.get_value(XAPIAN_VALUE_PKGNAME)
def run_query(parser, search_term):
search_query = parser.parse_query(search_term,
xapian.QueryParser.FLAG_PARTIAL |
xapian.QueryParser.FLAG_BOOLEAN)
enquire = xapian.Enquire(db)
enquire.set_query(search_query)
with ExecutionTime("enquire"):
mset = enquire.get_mset(0, db.get_doccount())
print "len mset: ", len(mset)
if __name__ == "__main__":
pathname = os.path.join(XAPIAN_BASE_PATH, "xapian")
db = xapian.Database(pathname)
print "app db only"
run_benchmark(db)
print "with apt-xapian-index"
axi = xapian.Database("/var/lib/apt-xapian-index/index")
db.add_database(axi)
run_benchmark(db)
print "simple query: a"
parser = xapian.QueryParser()
run_query(parser, "a")
run_query(parser, "ab")
run_query(parser, "abc")
print "with db query: a"
parser.set_database(db)
parser.add_boolean_prefix("pkg", "AP")
parser.set_default_op(xapian.Query.OP_AND)
run_query(parser, "a")
run_query(parser, "ab")
run_query(parser, "abc")
print "query for all !ATapplication"
search_query = xapian.Query(xapian.Query.OP_AND_NOT,
xapian.Query(""),
xapian.Query("ATapplication"))
enquire = xapian.Enquire(db)
enquire.set_query(search_query)
with ExecutionTime("enquire"):
mset = enquire.get_mset(0, db.get_doccount())
print "len mset: ", len(mset)
print "look at all !ATapplication"
search_query = xapian.Query(xapian.Query.OP_AND_NOT,
xapian.Query(""),
xapian.Query("ATapplication"))
enquire = xapian.Enquire(db)
enquire.set_query(search_query)
with ExecutionTime("enquire"):
mset = enquire.get_mset(0, db.get_doccount())
print "len mset: ", len(mset)
for m in mset:
doc = m.document
appname = doc.get_value(XAPIAN_VALUE_APPNAME)
pkgname = doc.get_value(XAPIAN_VALUE_PKGNAME)
|