def test_merge_ranges(): q = And([TermRange("f1", u("a"), None), TermRange("f1", None, u("z"))]) assert_equal(q.normalize(), TermRange("f1", u("a"), u("z"))) q = And([NumericRange("f1", None, u("aaaaa")), NumericRange("f1", u("zzzzz"), None)]) assert_equal(q.normalize(), q) q = And([TermRange("f1", u("a"), u("z")), TermRange("f1", "b", "x")]) assert_equal(q.normalize(), TermRange("f1", u("a"), u("z"))) q = And([TermRange("f1", u("a"), u("m")), TermRange("f1", u("f"), u("q"))]) assert_equal(q.normalize(), TermRange("f1", u("f"), u("m"))) q = Or([TermRange("f1", u("a"), u("m")), TermRange("f1", u("f"), u("q"))]) assert_equal(q.normalize(), TermRange("f1", u("a"), u("q"))) q = Or([TermRange("f1", u("m"), None), TermRange("f1", None, u("n"))]) assert_equal(q.normalize(), Every("f1")) q = And([Every("f1"), Term("f1", "a"), Variations("f1", "b")]) assert_equal(q.normalize(), Every("f1")) q = Or([Term("f1", u("q")), TermRange("f1", u("m"), None), TermRange("f1", None, u("n"))]) assert_equal(q.normalize(), Every("f1")) q = And([Or([Term("f1", u("a")), Term("f1", u("b"))]), Every("f1")]) assert_equal(q.normalize(), Every("f1")) q = And([Term("f1", u("a")), And([Or([Every("f1")])])]) assert_equal(q.normalize(), Every("f1"))
def get_stream(indexes, event, start, end, since, limit, media, time_only, query_term, sentiment): # Start indexing query by obtaining information related only to the specified event. query = NumericRange('event_id', event.id, event.id) stream = [] for index in indexes: searcher = index['index'].get_searcher() if query_term: query_parser = qparser.QueryParser('body', schema = index['index'].schema, group = qparser.OrGroup) query = query & query_parser.parse(unicode(query_term)) if limit == None: results = searcher.search(query, sortedby = 'creation_time', reverse = True, limit = DEFAULT_LIMIT) elif limit == 0: results = searcher.search(query, sortedby = 'creation_time', reverse = True, limit = None) else: results = searcher.search(query, sortedby = 'creation_time', reverse = True, limit = limit) for result in results: res_dict = dict(result) if media is not None and media.lower() != index['settings']['media'].lower(): continue if index['settings']['media'] == 'text' and sentiment: if 'sentiment' in res_dict: if sentiment == 'positive' and res_dict['sentiment'] > 0.00: pass elif sentiment == 'negative' and res_dict['sentiment'] < 0.00: pass else: continue else: continue res_dict['source_id'] = index['id'] res_dict['source_name'] = index['name'] res_dict['media'] = index['settings']['media'] res_dict['link'] = create_url(index, 'link_identifier', res_dict) res_dict['link'] = index['settings']['link'] % (res_dict['link']) if index['settings']['media'].lower() == 'other': res_dict['thumbnail'] = create_url(index, 'thumbnail_identifier', res_dict) res_dict['thumbnail'] = index['settings']['thumbnail'] % (res_dict['thumbnail']) if time_only: res_dict = {'creation_time': res_dict['creation_time'], 'indexing_time': res_dict['indexing_time'],} if since: if res_dict['indexing_time'] >= since: stream.append(res_dict) elif start and end: if res_dict['indexing_time'] >= start and res_dict['indexing_time'] <= end: stream.append(res_dict) else: stream.append(res_dict) stream = sorted(stream, key = itemgetter('creation_time')) return stream
def test_query_copy_hash(): def do(q1, q2): q1a = copy.deepcopy(q1) assert_equal(q1, q1a) assert_equal(hash(q1), hash(q1a)) assert_not_equal(q1, q2) do(Term("a", u("b"), boost=1.1), Term("a", u("b"), boost=1.5)) do(And([Term("a", u("b")), Term("c", u("d"))], boost=1.1), And([Term("a", u("b")), Term("c", u("d"))], boost=1.5)) do(Or([Term("a", u("b"), boost=1.1), Term("c", u("d"))]), Or([Term("a", u("b"), boost=1.8), Term("c", u("d"))], boost=1.5)) do(DisjunctionMax([Term("a", u("b"), boost=1.8), Term("c", u("d"))]), DisjunctionMax([Term("a", u("b"), boost=1.1), Term("c", u("d"))], boost=1.5)) do(Not(Term("a", u("b"), boost=1.1)), Not(Term("a", u("b"), boost=1.5))) do(Prefix("a", u("b"), boost=1.1), Prefix("a", u("b"), boost=1.5)) do(Wildcard("a", u("b*x?"), boost=1.1), Wildcard("a", u("b*x?"), boost=1.5)) do(FuzzyTerm("a", u("b"), constantscore=True), FuzzyTerm("a", u("b"), constantscore=False)) do(FuzzyTerm("a", u("b"), boost=1.1), FuzzyTerm("a", u("b"), boost=1.5)) do(TermRange("a", u("b"), u("c")), TermRange("a", u("b"), u("d"))) do(TermRange("a", None, u("c")), TermRange("a", None, None)) do(TermRange("a", u("b"), u("c"), boost=1.1), TermRange("a", u("b"), u("c"), boost=1.5)) do(TermRange("a", u("b"), u("c"), constantscore=True), TermRange("a", u("b"), u("c"), constantscore=False)) do(NumericRange("a", 1, 5), NumericRange("a", 1, 6)) do(NumericRange("a", None, 5), NumericRange("a", None, None)) do(NumericRange("a", 3, 6, boost=1.1), NumericRange("a", 3, 6, boost=1.5)) do(NumericRange("a", 3, 6, constantscore=True), NumericRange("a", 3, 6, constantscore=False)) # do(DateRange) do(Variations("a", u("render")), Variations("a", u("renders"))) do(Variations("a", u("render"), boost=1.1), Variations("a", u("renders"), boost=1.5)) do(Phrase("a", [u("b"), u("c"), u("d")]), Phrase("a", [u("b"), u("c"), u("e")])) do(Phrase("a", [u("b"), u("c"), u("d")], boost=1.1), Phrase("a", [u("b"), u("c"), u("d")], boost=1.5)) do(Phrase("a", [u("b"), u("c"), u("d")], slop=1), Phrase("a", [u("b"), u("c"), u("d")], slop=2)) # do(Ordered) do(Every(), Every("a")) do(Every("a"), Every("b")) do(Every("a", boost=1.1), Every("a", boost=1.5)) do(NullQuery, Term("a", u("b"))) do(ConstantScoreQuery(Term("a", u("b"))), ConstantScoreQuery(Term("a", u("c")))) do(ConstantScoreQuery(Term("a", u("b")), score=2.0), ConstantScoreQuery(Term("a", u("c")), score=2.1)) do(Require(Term("a", u("b")), Term("c", u("d"))), Require(Term("a", u("b"), boost=1.1), Term("c", u("d")))) # do(Require) # do(AndMaybe) # do(AndNot) # do(Otherwise) do(SpanFirst(Term("a", u("b")), limit=1), SpanFirst(Term("a", u("b")), limit=2)) do(SpanNear(Term("a", u("b")), Term("c", u("d"))), SpanNear(Term("a", u("b")), Term("c", u("e")))) do(SpanNear(Term("a", u("b")), Term("c", u("d")), slop=1), SpanNear(Term("a", u("b")), Term("c", u("d")), slop=2)) do(SpanNear(Term("a", u("b")), Term("c", u("d")), mindist=1), SpanNear(Term("a", u("b")), Term("c", u("d")), mindist=2)) do(SpanNear(Term("a", u("b")), Term("c", u("d")), ordered=True), SpanNear(Term("a", u("b")), Term("c", u("d")), ordered=False)) do(SpanNot(Term("a", u("b")), Term("a", u("c"))), SpanNot(Term("a", u("b")), Term("a", u("d")))) do(SpanOr([Term("a", u("b")), Term("a", u("c")), Term("a", u("d"))]), SpanOr([Term("a", u("b")), Term("a", u("c")), Term("a", u("e"))])) do(SpanContains(Term("a", u("b")), Term("a", u("c"))), SpanContains(Term("a", u("b")), Term("a", u("d"))))