Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSascha Silbe <sascha@silbe.org>2009-09-13 21:59:20 (GMT)
committer Sascha Silbe <sascha@silbe.org>2009-09-25 19:16:09 (GMT)
commiteed02c8e29549951eabdf39bbaee215dd3237617 (patch)
tree7a013e7d9692c4e513f864eca026aac4181155cb
parent6790cbf040d09137a2fd3018179363c2cf972808 (diff)
use xapian.sortable_serialise() for storing/searching numeric values (#1342)bug-1342
-rw-r--r--src/carquinyol/indexstore.py16
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: