Exemplo n.º 1
0
    def sphinx(self):
        from fias.sphinxit import search
        query = search().match('@aoguid "%s"' % self.aoguid, raw=True)
        result = query.ask()
        print result
        items = result['result']['items']
        print "!!!!!!!!!!!!!fdfd"
        print items

        return items
Exemplo n.º 2
0
    def get_results(self, request, term, page, context):
        from fias.sphinxit import search

        query = search().match(term + '*').order_by('aolevel', 'asc').limit(0, 20)
        result = query.ask()

        items = result['result']['items']

        if len(items):
            return (
                NO_ERR_RESP,
                False,
                ((l['aoguid'], l['fullname'], {'level': l['aolevel']}) for l in items)
            )

        return EMPTY_RESULT
Exemplo n.º 3
0
    def sphinx_filter(self, request, queryset, view):
        from fias.sphinxit import search

        page_size = view.get_paginate_by()
        page_query_param = request.QUERY_PARAMS.get(view.page_kwarg)
        page = page_query_param or 1
        try:
            page = int(page)
            if page <= 0:
                page = 1
        except ValueError:
            page = 1

        term = '*,'.join(self.get_search_terms(request))

        query = search().match(term + '*').options(field_weights={
            'formalname': 100,
            'fullname': 80
        }).limit(0, (page + 1) * page_size)  # запросим на 1 страницу больше

        # установим ограничение по родительскому объекту
        parent_filter_param = request.QUERY_PARAMS.get('parentguid')
        if parent_filter_param:
            query = query.match('@parentguid ' + parent_filter_param)

        # установим ограничение по уровням
        level_filter_param = request.QUERY_PARAMS.get('aolevel')
        if level_filter_param:
            query = query.filter(aolevel__in=level_filter_param.split(','))

        #Hack to bypass bug in sphixit. https://github.com/semirook/sphinxit/issues/16
        query._nodes.OrderBy.orderings = [u'item_weight DESC']

        result = query.ask()
        items = result['result']['items']

        aoguids = [item['aoguid'] for item in items]

        if len(aoguids):
            return queryset.filter(aoguid__in=aoguids)
        else:
            return super(AddressScanFilter,
                         self).filter_queryset(request, queryset, view)
Exemplo n.º 4
0
    def sphinx_filter(self, request, queryset, view):
        from fias.sphinxit import search

        page_size = view.get_paginate_by()
        page_query_param = request.QUERY_PARAMS.get(view.page_kwarg)
        page = page_query_param or 1
        try:
            page = int(page)
            if page <= 0:
                page = 1
        except ValueError:
            page = 1

        term = '*,'.join(self.get_search_terms(request))

        query = search().match(term + '*').options(
            field_weights={'formalname': 100, 'fullname': 80}
        ).limit(0, (page + 1) * page_size)  # запросим на 1 страницу больше

        # установим ограничение по родительскому объекту
        parent_filter_param = request.QUERY_PARAMS.get('parentguid')
        if parent_filter_param:
            query = query.match('@parentguid '+parent_filter_param)

        # установим ограничение по уровням
        level_filter_param = request.QUERY_PARAMS.get('aolevel')
        if level_filter_param:
            query = query.filter(aolevel__in=level_filter_param.split(','))

        #Hack to bypass bug in sphixit. https://github.com/semirook/sphinxit/issues/16
        query._nodes.OrderBy.orderings = [u'item_weight DESC']

        result = query.ask()
        items = result['result']['items']

        aoguids = [item['aoguid'] for item in items]

        if len(aoguids):
            return queryset.filter(aoguid__in=aoguids)
        else:
            return super(AddressScanFilter, self).filter_queryset(request, queryset, view)
Exemplo n.º 5
0
    def get_results(self, request, term, page, context):
        from fias.sphinxit import search

        query = search().match(term + '*').options(field_weights={'formalname': 100,
                                                                  'fullname': 80}).limit(0, 50)

        #Hack to bypass bug in sphixit. https://github.com/semirook/sphinxit/issues/16
        query._nodes.OrderBy.orderings = [u'item_weight DESC', u'weight() DESC']

        result = query.ask()

        items = result['result']['items']

        if len(items):
            return (
                NO_ERR_RESP,
                False,
                ((l['aoguid'], l['fullname'], {'level': l['aolevel']}) for l in items)
            )

        return EMPTY_RESULT
Exemplo n.º 6
0
    def get_results(self, request, term, page, context):
        from fias.sphinxit import search

        query = search().match(term + '*').options(field_weights={
            'formalname': 100,
            'fullname': 80
        }).limit(0, 50)

        #Hack to bypass bug in sphixit. https://github.com/semirook/sphinxit/issues/16
        query._nodes.OrderBy.orderings = [
            u'item_weight DESC', u'weight() DESC'
        ]

        result = query.ask()

        items = result['result']['items']

        if len(items):
            return (NO_ERR_RESP, False, ((l['aoguid'], l['fullname'], {
                'level': l['aolevel']
            }) for l in items))

        return EMPTY_RESULT