def search(self,
               query_string,
               sort_by=None,
               start_offset=0,
               end_offset=None,
               fields='',
               highlight=False,
               facets=None,
               date_facets=None,
               query_facets=None,
               narrow_queries=None,
               spelling_query=None,
               limit_to_registered_models=None,
               **kwargs):
        hits = 0
        results = []

        if query_string:
            for model in self.site.get_indexed_models():
                if query_string == '*':
                    qs = model.objects.all()
                else:
                    for term in query_string.split():
                        queries = []

                        for field in model._meta._fields():
                            if hasattr(field, 'related'):
                                continue

                            if not field.get_internal_type() in (
                                    'TextField', 'CharField', 'SlugField'):
                                continue

                            queries.append(
                                Q(**{'%s__icontains' % field.name: term}))

                        qs = model.objects.filter(
                            reduce(lambda x, y: x | y, queries))

                hits += len(qs)

                for match in qs:
                    del match.app_label
                    del match.model_name
                    result = SearchResult(match._meta.app_label,
                                          match._meta.module_name, match.pk, 0,
                                          **match.__dict__)
                    # For efficiency.
                    result._model = match.__class__
                    result._object = match
                    results.append(result)

        return {
            'results': results,
            'hits': hits,
        }
 def iterator(self):
     for match in QuerySet.iterator(self):
         obj = match.content_object
         if obj is None:
             continue
         kwargs = dict()
         for key, value in match.document.iteritems():
             kwargs[str(key)] = value
         result = SearchResult(obj._meta.app_label, obj._meta.module_name, obj.pk, 0, **kwargs)
         # For efficiency.
         result._model = obj.__class__
         result._object = obj
         yield result
 def iterator(self):
     for match in QuerySet.iterator(self):
         obj = match.content_object
         if obj is None:
             continue
         kwargs = dict()
         for key, value in match.document.iteritems():
             kwargs[str(key)] = value
         result = SearchResult(obj._meta.app_label, obj._meta.module_name,
                               obj.pk, 0, **kwargs)
         # For efficiency.
         result._model = obj.__class__
         result._object = obj
         yield result
 def search(self, query_string, sort_by=None, start_offset=0, end_offset=None,
            fields='', highlight=False, facets=None, date_facets=None, query_facets=None,
            narrow_queries=None, spelling_query=None,
            limit_to_registered_models=None, **kwargs):
     hits = 0
     results = []
     
     if query_string:
         for model in self.site.get_indexed_models():
             if query_string == '*':
                 qs = model.objects.all()
             else:
                 for term in query_string.split():
                     queries = []
                     
                     for field in model._meta._fields():
                         if hasattr(field, 'related'):
                             continue
                         
                         if not field.get_internal_type() in ('TextField', 'CharField', 'SlugField'):
                             continue
                         
                         queries.append(Q(**{'%s__icontains' % field.name: term}))
                     
                     qs = model.objects.filter(reduce(lambda x, y: x|y, queries))
             
             hits += len(qs)
             
             for match in qs:
                 del match.app_label
                 del match.model_name
                 result = SearchResult(match._meta.app_label, match._meta.module_name, match.pk, 0, **match.__dict__)
                 # For efficiency.
                 result._model = match.__class__
                 result._object = match
                 results.append(result)
     
     return {
         'results': results,
         'hits': hits,
     }