diff options
author | Sascha Silbe <sascha@silbe.org> | 2009-09-13 21:59:20 (GMT) |
---|---|---|
committer | Sascha Silbe <sascha@silbe.org> | 2009-09-25 19:16:32 (GMT) |
commit | 5839cb194d596c18aff82222892653b709093a2c (patch) | |
tree | bbf1d932404e8dcd179ab5287b952fb800e45987 | |
parent | 40a5ec7286a74c17763cbee9644c57732b7e5ec2 (diff) |
use xapian.sortable_serialise() for storing/searching numeric values (#1342)testsuite+bug-1342
-rw-r--r-- | src/carquinyol/indexstore.py | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/carquinyol/indexstore.py b/src/carquinyol/indexstore.py index 1a9f838..e919bff 100644 --- a/src/carquinyol/indexstore.py +++ b/src/carquinyol/indexstore.py @@ -63,7 +63,7 @@ _QUERY_VALUE_MAP = { class TermGenerator (xapian.TermGenerator): def index_document(self, document, properties): - document.add_value(_VALUE_TIMESTAMP, str(properties['timestamp'])) + document.add_value(_VALUE_TIMESTAMP, xapian.sortable_serialise(properties['timestamp'])) document.add_value(_VALUE_TITLE, properties.get('title', '').strip()) self.set_document(document) @@ -139,6 +139,11 @@ class QueryParser (xapian.QueryParser): 'Did you mean to pass a list instead?') start, end = value + if isinstance(start, (float, int, long)): + return Query(Query.OP_VALUE_RANGE, value_no, + xapian.sortable_serialise(start), + xapian.sortable_serialise(end)) + return Query(Query.OP_VALUE_RANGE, value_no, str(start), str(end)) def _parse_query_value(self, name, value_no, value): @@ -156,9 +161,14 @@ class QueryParser (xapian.QueryParser): end = value.get('end', sys.maxint) return self._parse_query_value_range(name, (start, end), value_no) + elif isinstance(value, (float, int, long)): + return Query(Query.OP_VALUE_RANGE, value_no, + xapian.sortable_serialise(value), + xapian.sortable_serialise(value)) + else: - return Query(Query.OP_VALUE_RANGE, - _QUERY_VALUE_MAP[name], str(value), str(value)) + return Query(Query.OP_VALUE_RANGE, value_no, str(value), + str(value)) def _parse_query_xapian(self, query_str): try: |