Beispiel #1
0
 def _query_filter(self):
     criterias = []
     for k, v in self.query_params.items():
         if k == 'correspondent__id':
             criterias.append(query.Term('correspondent_id', v))
         elif k == 'tags__id__all':
             for tag_id in v.split(","):
                 criterias.append(query.Term('tag_id', tag_id))
         elif k == 'document_type__id':
             criterias.append(query.Term('type_id', v))
         elif k == 'correspondent__isnull':
             criterias.append(query.Term("has_correspondent", v == "false"))
         elif k == 'is_tagged':
             criterias.append(query.Term("has_tag", v == "true"))
         elif k == 'document_type__isnull':
             criterias.append(query.Term("has_type", v == "false"))
         elif k == 'created__date__lt':
             criterias.append(
                 query.DateRange("created", start=None, end=isoparse(v)))
         elif k == 'created__date__gt':
             criterias.append(
                 query.DateRange("created", start=isoparse(v), end=None))
         elif k == 'added__date__gt':
             criterias.append(
                 query.DateRange("added", start=isoparse(v), end=None))
         elif k == 'added__date__lt':
             criterias.append(
                 query.DateRange("added", start=None, end=isoparse(v)))
     if len(criterias) > 0:
         return query.And(criterias)
     else:
         return None
Beispiel #2
0
def test_gtlt():
    schema = fields.Schema(a=fields.KEYWORD, b=fields.NUMERIC,
                           c=fields.KEYWORD,
                           d=fields.NUMERIC(float), e=fields.DATETIME)
    qp = qparser.QueryParser("a", schema)
    qp.add_plugin(plugins.GtLtPlugin())
    qp.add_plugin(dateparse.DateParserPlugin())

    q = qp.parse(u("a:hello b:>100 c:<=z there"))
    assert_equal(q.__class__, query.And)
    assert_equal(len(q), 4)
    assert_equal(q[0], query.Term("a", "hello"))
    assert_equal(q[1], query.NumericRange("b", 100, None, startexcl=True))
    assert_equal(q[2], query.TermRange("c", None, 'z'))
    assert_equal(q[3], query.Term("a", "there"))

    q = qp.parse(u("hello e:>'29 mar 2001' there"))
    assert_equal(q.__class__, query.And)
    assert_equal(len(q), 3)
    assert_equal(q[0], query.Term("a", "hello"))
    # As of this writing, date ranges don't support startexcl/endexcl
    assert_equal(q[1], query.DateRange("e", datetime(2001, 3, 29, 0, 0), None))
    assert_equal(q[2], query.Term("a", "there"))

    q = qp.parse(u("a:> alfa c:<= bravo"))
    assert_equal(text_type(q), "(a:a: AND a:alfa AND a:c: AND a:bravo)")

    qp.remove_plugin_class(plugins.FieldsPlugin)
    qp.remove_plugin_class(plugins.RangePlugin)
    q = qp.parse(u("hello a:>500 there"))
    assert_equal(text_type(q), "(a:hello AND a:a: AND a:500 AND a:there)")
    def query(self, parser):
        from whoosh import query

        fieldname = self.fieldname or parser.fieldname
        return query.DateRange(fieldname,
                               self.start,
                               self.end,
                               boost=self.boost)
Beispiel #4
0
 def query(self, parser):
     from whoosh import query
     fieldname = self.fieldname or parser.fieldname
     start = self.starttime
     end = self.endtime
     
     if start is None and end is None:
         return query.Every(fieldname)
     else:
         return query.DateRange(fieldname, start, end, boost=self.boost)
Beispiel #5
0
def test_daterange_empty_field():
    schema = fields.Schema(test=fields.DATETIME)
    ix = RamStorage().create_index(schema)

    writer = ix.writer()
    writer.add_document(test=None)
    writer.commit()

    with ix.searcher() as s:
        q = query.DateRange("test", datetime.fromtimestamp(0), datetime.today())
        r = s.search(q)
        assert_equal(len(r), 0)
Beispiel #6
0
 def query(self, parser):
     from whoosh import query
     
     field = parser.schema[self.fieldname]
     dt = self.timeobj
     if isinstance(self.timeobj, datetime):
         return query.Term(self.fieldname, field.to_text(dt),
                           boost=self.boost)
     elif isinstance(self.timeobj, timespan):
         return query.DateRange(self.fieldname, dt.start, dt.end,
                                boost=self.boost)
     else:
         raise Exception("Unknown time object: %r" % dt)
Beispiel #7
0
    def query(self, parser):
        from whoosh import query

        fieldname = self.fieldname or parser.fieldname
        field = parser.schema[fieldname]
        dt = self.dt
        if isinstance(self.dt, datetime):
            btext = field.to_bytes(dt)
            return query.Term(fieldname, btext, boost=self.boost)
        elif isinstance(self.dt, timespan):
            return query.DateRange(fieldname, dt.start, dt.end,
                                   boost=self.boost)
        else:
            raise Exception("Unknown time object: %r" % dt)