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:09 (GMT) |
commit | eed02c8e29549951eabdf39bbaee215dd3237617 (patch) | |
tree | 7a013e7d9692c4e513f864eca026aac4181155cb | |
parent | 6790cbf040d09137a2fd3018179363c2cf972808 (diff) |
use xapian.sortable_serialise() for storing/searching numeric values (#1342)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: |