Esempio n. 1
0
    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)
Esempio n. 2
0
 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))
Esempio n. 3
0
    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)
Esempio n. 4
0
    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)
Esempio n. 5
0
    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()))
Esempio n. 6
0
    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()
Esempio n. 7
0
def get_pubs(filter=MissingFilter('types')):
  q = FilteredQuery(MatchAllQuery(), filter)

  pubs = conn.search(query=q, indices=e_index, doc_types="immo")
  return pubs
Esempio n. 8
0
# 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
Esempio n. 10
0
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