|
a/src/python/samples/recollq.py |
|
b/src/python/samples/recollq.py |
1 |
#!/usr/bin/env python
|
1 |
#!/usr/bin/env python
|
|
|
2 |
"""A python version of the command line query tool recollq (a bit simplified)
|
|
|
3 |
The input string is always interpreted as a query language string.
|
|
|
4 |
This could actually be useful for something after some customization
|
|
|
5 |
"""
|
2 |
|
6 |
|
3 |
import sys
|
7 |
import sys
|
|
|
8 |
from getopt import getopt
|
4 |
import recoll
|
9 |
import recoll
|
|
|
10 |
|
5 |
allmeta = ("title", "keywords", "abstract", "url", "mimetype", "mtime",
|
11 |
allmeta = ("title", "keywords", "abstract", "url", "mimetype", "mtime",
|
6 |
"ipath", "fbytes", "dbytes", "relevancyrating")
|
12 |
"ipath", "fbytes", "dbytes", "relevancyrating")
|
7 |
|
13 |
|
8 |
def Usage():
|
14 |
def Usage():
|
9 |
print >> sys.stderr, "Usage: recollq.py <recoll query>"
|
15 |
print >> sys.stderr, "Usage: recollq.py [-c conf] [-i extra_index] <recoll query>"
|
10 |
sys.exit(1);
|
16 |
sys.exit(1);
|
11 |
|
17 |
|
12 |
def dotest(db, q):
|
18 |
def doquery(db, q):
|
|
|
19 |
"""Parse and execute query on open db"""
|
|
|
20 |
# Get query object
|
13 |
query = db.query()
|
21 |
query = db.query()
|
|
|
22 |
# Parse/run input query string
|
|
|
23 |
nres = query.execute(q)
|
14 |
|
24 |
|
15 |
nres = query.execute(q)
|
25 |
# Print results:
|
16 |
print "Result count: ", nres
|
26 |
print "Result count: ", nres
|
17 |
while query.next >= 0 and query.next < nres:
|
27 |
while query.next >= 0 and query.next < nres:
|
18 |
doc = query.fetchone()
|
28 |
doc = query.fetchone()
|
19 |
print query.next, ":",
|
29 |
print query.next, ":",
|
20 |
for k in ("title", "url"):
|
30 |
for k in ("title", "url"):
|
21 |
print k, ":", getattr(doc, k).encode('utf-8')
|
31 |
print k, ":", getattr(doc, k).encode('utf-8')
|
22 |
abs = db.makeDocAbstract(doc, query).encode('utf-8')
|
32 |
abs = db.makeDocAbstract(doc, query).encode('utf-8')
|
23 |
print abs
|
33 |
print abs
|
24 |
print
|
34 |
print
|
25 |
|
35 |
|
26 |
# End dotest
|
36 |
|
27 |
if len(sys.argv) < 2:
|
37 |
if len(sys.argv) < 2:
|
28 |
Usage()
|
38 |
Usage()
|
29 |
|
39 |
|
|
|
40 |
confdir=""
|
|
|
41 |
extra_dbs = []
|
|
|
42 |
# Snippet params
|
|
|
43 |
maxchars = 120
|
|
|
44 |
contextwords = 4
|
|
|
45 |
# Process options: [-c confdir] [-i extra_db [-i extra_db] ...]
|
|
|
46 |
options, args = getopt(sys.argv[1:], "c:i:")
|
|
|
47 |
for opt,val in options:
|
|
|
48 |
if opt == "-c":
|
|
|
49 |
confdir = val
|
|
|
50 |
elif opt == "-i":
|
|
|
51 |
extra_dbs.append(val)
|
|
|
52 |
else:
|
|
|
53 |
print >> sys.stderr, "Bad opt: ", opt
|
|
|
54 |
Usage()
|
|
|
55 |
|
|
|
56 |
# The query should be in the remaining arg(s)
|
|
|
57 |
if len(args) == 0:
|
|
|
58 |
print >> sys.stderr, "No query found in command line"
|
|
|
59 |
Usage()
|
30 |
q = ""
|
60 |
q = ""
|
31 |
for word in sys.argv[1:]:
|
61 |
for word in args:
|
32 |
q += word + " "
|
62 |
q += word + " "
|
33 |
|
63 |
|
34 |
print "TESTING WITH .recoll, question: [" + q + "]"
|
64 |
print "QUERY: [", q, "]"
|
35 |
db = recoll.connect()
|
65 |
db = recoll.connect(confdir=confdir,
|
|
|
66 |
extra_dbs=extra_dbs)
|
36 |
db.setAbstractParams(maxchars=120, contextwords=4)
|
67 |
db.setAbstractParams(maxchars=maxchars, contextwords=contextwords)
|
37 |
dotest(db, q)
|
|
|
38 |
|
68 |
|
39 |
sys.exit(0)
|
69 |
doquery(db, q)
|
40 |
|
70 |
|
41 |
print "TESTING WITH .recoll-test"
|
|
|
42 |
db = recoll.connect(confdir="/Users/dockes/.recoll-test")
|
|
|
43 |
dotest(db, q)
|
|
|
44 |
|
71 |
|
45 |
print "TESTING WITH .recoll-doc"
|
|
|
46 |
db = recoll.connect(confdir="/y/home/dockes/.recoll-doc")
|
|
|
47 |
dotest(db, q)
|
|
|
48 |
|
|
|
49 |
print "TESTING WITH .recoll and .recoll-doc"
|
|
|
50 |
db = recoll.connect(confdir="/Users/dockes/.recoll",
|
|
|
51 |
extra_dbs=("/y/home/dockes/.recoll-doc",))
|
|
|
52 |
dotest(db, q)
|
|
|
53 |
|
|
|