Modified:
/trunk/applications/flax_core_examples/search_app/search_app.py
/trunk/applications/flax_core_examples/search_app/templates/search.mako
=======================================
--- /trunk/applications/flax_core_examples/search_app/search_app.py Mon Jun
21 04:49:19 2010
+++ /trunk/applications/flax_core_examples/search_app/search_app.py Tue Jun
22 04:20:34 2010
@@ -44,23 +44,39 @@
if not dbname:
return 'no database specified'
- i = web.input(query='', authfac=[], startrank=0)
+ i = web.input(query='', authfac=[], startrank=0,
+ yearfrom='', yearto='')
t = mlookup.get_template('search.mako')
# FIXME - could cache these for efficiency
db = xapian.Database(os.path.join(DBDIR, dbname))
- fm = flax.core.Fieldmap(db)
- qp = fm.query_parser(db)
-
- qo = qp.parse_query(i.query)
+ fieldmap = flax.core.Fieldmap(db)
+ queryparser = fieldmap.query_parser(db)
+
+ query = queryparser.parse_query(i.query)
+
+ # add authors filter, if supplied
if i.authfac:
- qo = fm.FILTER(qo, fm.query('author', i.authfac))
-
- results = fm.search(db, qo, int(i.startrank), 20,
- facet_fields=['author'])
-
- return t.render_unicode(query=i.query, results=results,
- authfac=i.authfac).encode('utf-8', 'ignore')
+ query = fieldmap.FILTER(query, fieldmap.query('author',
i.authfac))
+
+ # add year range filter, if supplied
+ if i.yearfrom or i.yearto:
+ yf = int(i.yearfrom) if i.yearfrom else 0
+ yt = int(i.yearto) if i.yearto else 3000
+ query = fieldmap.FILTER(query,
fieldmap.range_query('published', yf, yt))
+
+ print 'debug: query=%s' % query
+
+ results = fieldmap.search(db, query, int(i.startrank), 20,
+ facet_fields=['author'])
+
+ return t.render_unicode(
+ query=i.query,
+ results=results,
+ authfac=i.authfac,
+ yearfrom=i.yearfrom,
+ yearto=i.yearto,
+ ).encode('utf-8', 'ignore')
except xapian.DatabaseOpeningError:
return 'no database at %s' % os.path.join(DBDIR, dbname)
=======================================
--- /trunk/applications/flax_core_examples/search_app/templates/search.mako
Mon Jun 21 04:49:19 2010
+++ /trunk/applications/flax_core_examples/search_app/templates/search.mako
Tue Jun 22 04:20:34 2010
@@ -19,7 +19,31 @@
<h1>flax.core simple search</h1>
<form method="GET">
- <input id="query" name="query" value="${query}" />
+ Query: <input id="query" name="query" value="${query}" />
+
+ Year:
+ <select name="yearfrom">
+ <option value="">Any</option>
+ % for yr in xrange(1700, 2020, 10):
+ % if str(yr) == yearfrom:
+ <option selected>${yr}</option>
+ % else:
+ <option>${yr}</option>
+ % endif
+ % endfor
+ </select>
+ to
+ <select name="yearto">
+ <option value="">Any</option>
+ % for yr in xrange(1700, 2020, 10):
+ % if str(yr) == yearto:
+ <option selected>${yr}</option>
+ % else:
+ <option>${yr}</option>
+ % endif
+ % endfor
+ </select>
+
<input type="submit" value="Search" />
% if results.size():