def test_GeoDistanceFilter(self): gq = GeoDistanceFilter("pin.location", {"lat": 40, "lon": 70}, "200km") q = FilteredQuery(MatchAllQuery(), gq) resultset = self.conn.search(query=q, indices=["test-mindex"]) self.assertEquals(resultset.total, 1) gq = GeoDistanceFilter("pin.location", [70, 40], "200km") q = FilteredQuery(MatchAllQuery(), gq) resultset = self.conn.search(query=q, indices=["test-mindex"]) self.assertEquals(resultset.total, 1)
def __call__(self, dquery): filters = [] catalog = self.catalogtool._catalog idxs = catalog.indexes.keys() query = MatchAllQuery() for key, value in dquery.items(): if key not in idxs: continue index = getIndex(catalog, key) if index is None: continue qq = index.get_query(key, value) if qq is None: continue if type(qq) == tuple: qq, is_query = qq else: is_query = False if is_query: query = qq else: filters.append(qq) if len(filters) == 0: return query else: return FilteredQuery(query, ANDFilter(filters))
def test_GeoBoundingBoxFilter(self): gq = GeoBoundingBoxFilter("pin.location", location_tl={ "lat": 40.717, "lon": 70.99 }, location_br={ "lat": 40.03, "lon": 72.0 }) q = FilteredQuery(MatchAllQuery(), gq) resultset = self.conn.search(query=q, indices=["test-mindex"]) self.assertEquals(resultset.total, 1) gq = GeoBoundingBoxFilter("pin.location", [70.99, 40.717], [74.1, 40.03]) q = FilteredQuery(MatchAllQuery(), gq) result2 = self.conn.search(query=q, indices=["test-mindex"]) self.assertEquals(result2.total, 1)
def test_GeoPolygonFilter(self): gq = GeoPolygonFilter("pin.location", [{ "lat": 50, "lon": -30 }, { "lat": 30, "lon": -80 }, { "lat": 80, "lon": -90 }]) q = FilteredQuery(MatchAllQuery(), gq) resultset = self.conn.search(query=q, indices=["test-mindex"]) self.assertEquals(resultset.total, 1) gq = GeoPolygonFilter("pin.location", [[-30, 50], [-80, 30], [-90, 80]]) q = FilteredQuery(MatchAllQuery(), gq) resultset = self.conn.search(query=q, indices=["test-mindex"]) self.assertEquals(resultset.total, 1)
def search(self, index_type='job'): if not self.query.is_valid(): self.results = EmptyResults() return where_filters = [ MatchAllFilter() ] if self.query.params['where']: where_filters= [ QueryFilter(StringQuery(self.query.get_where(), search_fields=['city'],\ analyze_wildcard=True, default_operator="AND")) ] query = FilteredQuery( StringQuery(self.query.params['what'], search_fields=settings.SEARCH_WHAT_FIELDS, default_operator='AND', analyze_wildcard=True)\ if self.query.params['what'] else MatchAllQuery(), ORFilter(self._get_geo_filters(where_filters)) ) facets_filter = [] if self.query.params.has_key('company.facet') and len(self.query.params['company.facet']): facets_filter.append(TermFilter('company.facet', self.query.params['company.facet'])) sorting = {'_score': {'order': 'desc' }} if self.query.params.has_key('sorting'): if self.query.params['sorting'] in ['score', 'published_date']: sorting = {self.query.params['sorting']: {'order': 'desc' }} query = Search( query, ORFilter(facets_filter) if len(facets_filter) else [], start=self.query.start_page(), size=settings.PAGINATION_PAGE_SIZE, sort=sorting ) query.facet.add_term_facet( 'company.facet', size=settings.SEARCH_FACETS_SIZE ) self.results = self.elastic.search(query, settings.SEARCH_ALIASES, index_type) logger.info('Elastic query: %s\n' % str(query.to_search_json()))
def afterCompletion(self, transaction): tdata = get() if not tdata.registered: return es = tdata.es if es.mode == DISABLE_MODE: tdata.reset() return success = transaction.status == Status.COMMITTED query = FilteredQuery(MatchAllQuery(), TermFilter('transaction_id', tdata.tid)) conn = es.conn # NEED to refresh here otherwise we'll have inconsistencies conn.refresh() try: docs = conn.search(query, es.catalogsid, es.trns_catalogtype, sort='order:desc') docs.count() # force executing except ElasticSearchException: # XXX uh oh, nasty, we have a problem. Let's log it. warn("Error trying to abort transaction: %s" %( traceback.format_exc())) tdata.reset() return for doc in docs: conn.delete(es.catalogsid, es.trns_catalogtype, doc.get_id()) if not success: if doc.action == Actions.add: # if it was an add action, remove delete conn.delete(es.catalogsid, es.catalogtype, doc.uid) elif doc.action in (Actions.modify, Actions.delete): # if it was a modify or delete, restore the doc restored_doc = loads(doc.data) conn.index(restored_doc, es.catalogsid, es.catalogtype, doc.uid) # NEED to refresh here otherwise we'll have inconsistencies conn.refresh() tdata.reset()
def get_pubs(filter=MissingFilter('types')): q = FilteredQuery(MatchAllQuery(), filter) pubs = conn.search(query=q, indices=e_index, doc_types="immo") return pubs
# test from mediaresearchapp.tasks import MediaAggregateSQLTask if __name__ == '__main__': es = ES("127.0.0.1:9200", default_indices='mediaaggregate') # Filters filters = [GeoDistanceFilter('location', [40.0, 9.00], 20, 'arc', 'km')] # filters = [TermFilter('message', 'elastic'), # GeoDistanceFilter('locations', # {"lat": 40.0, "lon": 9.00}, # 20, 'arc', 'km') # ] filter = ANDFilter(filters) q = FilteredQuery(MatchAllQuery(), filter) results = es.search(q) for r in results: print r break q4 = RegexTermQuery('city', 'bang.*') print q4 resultset = es.search(q4) for r in resultset: print r query_str = { "query": { "termquery": [{ "fieldname1": "value"
from pyes import ES from pyes import TermQuery from pyes import RangeQuery from pyes import QueryStringQuery from pyes import BoolQuery from pyes import ESRange from pyes import ANDFilter from pyes import TermFilter from pyes import FilteredQuery from pyes import query conn = ES('localhost:9200') a_range = RangeQuery(qrange=ESRange('a', 0.179, 0.180)) b_filter = TermFilter("b", "0.2") period_filter = TermFilter("period", "2") total_filter = ANDFilter([b_filter, period_filter]) c_range = RangeQuery(qrange=ESRange('c', 8, 12)) que = FilteredQuery(BoolQuery(must=[a_range, c_range]), total_filter) search = query.Search(query=que) get = conn.search(search, indices='shrimp') census = get.total for i in get: print i
def get_pubs(): q = TermQuery('expired', 'true') f = NotFilter(HasChildFilter('opinion', TermQuery('opinion', 'like'))) q = FilteredQuery(q, f) pubs = conn.search(query=q, indices=e_index, doc_types="immo") return pubs