示例#1
0
 def get(self, request, *args, **kwargs):
     """
     Get method with params
     :param request:
     :param args:
     :param kwargs:
     :return:
     """
     query = request.GET['q']
     if query == '':
         return redirect('tube:index')
     ids_response = []
     ids_response_videos = []
     response = raw_search(Channel, query)
     response_video = raw_search(Video, query)
     for val in response['hits']:
         ids_response.append(val.get('objectID'))
     for val in response_video['hits']:
         ids_response_videos.append(val.get('objectID'))
     if (len(ids_response)) > 0:
         channels = Channel.objects.filter(id__in=ids_response)
     else:
         channels = ''
     if (len(ids_response_videos)) > 0:
         videos = Video.objects.filter(id__in=ids_response_videos)
     else:
         videos = ''
     return render(request, self.template_name, {
         'q': query,
         'channels': channels,
         'videos': videos
     })
示例#2
0
    def get(self, request, *args, **kwargs):
        context = dict()
        if request.GET.get('page'):
            query = request.session['query']
            params = {
                "hitsPerPage": self.no_of_item,
                "page": request.GET.get('page')
            }
        else:
            query = request.GET.get('address')
            params = {"hitsPerPage": self.no_of_item}
        request.session['query'] = query

        a = raw_search(Property, query, params)
        b = raw_search(Property, query, {"hitsPerPage": 2000})

        property_list = Property.objects.filter(
            id__in=[int(w.get('objectID')) for w in a.get('hits')])

        if property_list.exists():

            context = self.get_context(property_list)
            pageNo = a.get('nbPages')
            context['last_page'] = pageNo
            context['pageNo'] = range(0, pageNo)
            context['no_of_properties_for_sales'] = a.get('nbHits')

            context['result'] = True
            context['query'] = query
        else:
            context = self.get_context(get_feature())
            context['result'] = True

        return render(request, 'main/search.html', context)
    def test_save_signal(self):
        Website.objects.create(name='Algolia', url='https://www.algolia.com')
        Website.objects.create(name='Google', url='https://www.google.com')
        Website.objects.create(name='Facebook', url='https://www.facebook.com')

        time.sleep(10)  # FIXME: Expose last task's ID so we can waitTask instead of sleeping
        self.assertEqual(raw_search(Website)['nbHits'], 3)
示例#4
0
    def test_save_signal(self):
        Website.objects.create(name='Algolia', url='https://www.algolia.com')
        Website.objects.create(name='Google', url='https://www.google.com')
        Website.objects.create(name='Facebook', url='https://www.facebook.com')

        time.sleep(5)
        self.assertEqual(raw_search(Website)['nbHits'], 3)
示例#5
0
def search(request):
    """Search story by title """
    search_query = request.GET.get('title')
    params = {"hitsPerPage": 5}
    response = raw_search(models.Compose, search_query, params)
    if response['nbHits'] == 0:
        return JsonResponse({"error": "No search Found"},
                            status=status.HTTP_404_NOT_FOUND)
    return JsonResponse(response, status=status.HTTP_200_OK)
示例#6
0
 def post(self, request, *args, **kwargs):
     context = dict()
     mortage_query = request.POST.get('mortage_query')
     params = {"hitsPerPage": 50}
     a = raw_search(Mortage, mortage_query, params)
     mortage_list = Mortage.objects.filter(
         id__in=[int(w.get('objectID')) for w in a.get('hits')])
     if mortage_list.exists():
         context['mortages'] = mortage_list
     return render(request, 'main/lenders.html', context)
示例#7
0
 def search(self, term: str) -> 'QuerySet':
     """
     Search by term using algolia search engine, filter results using ids from DB
     :param term: search term
     :return:
     """
     params = {"hitsPerPage": 100}
     response = raw_search(self.model, term, params)
     self.search_result_ids = [hit['objectID'] for hit in response['hits']]
     return self.filter(id__in=self.search_result_ids)
示例#8
0
def search_query(request):
    try:
        queryset = Products.objects.all()
        query = request.GET.get('q')
        if query:
            params = {"hitsPerPage": 15}
            queryset = raw_search(Products, query, params)
        return JsonResponse({'results': queryset['hits']})
    except:
        return HttpResponse('nothing')
    def test_delete_signal(self):
        Website.objects.create(name='Algolia', url='https://www.algolia.com')
        Website.objects.create(name='Google', url='https://www.google.com')
        Website.objects.create(name='Facebook', url='https://www.facebook.com')

        Website.objects.get(name='Algolia').delete()
        Website.objects.get(name='Facebook').delete()

        time.sleep(10)
        result = raw_search(Website)
        self.assertEqual(result['nbHits'], 1)
        self.assertEqual(result['hits'][0]['name'], 'Google')
示例#10
0
 def resolve_strands(self, info, query='', size=100, page=0):
     if query:
         # TODO: Incorporate permissions into indices for efficiency
         results = raw_search(Strand,
                              query=query,
                              params={
                                  'hitsPerPage': size,
                                  'page': page
                              })
         return Strand.objects.filter(
             id__in=map(lambda x: x['objectID'], results['hits'])).all()
     return Strand.objects.all()
示例#11
0
def article_search(request):
    query = request.GET.get('query', '')
    response = raw_search(Article, query)
    ids = [article['objectID'] for article in response['hits']]
    # Allow to get the articles in the specific sequence of ids we gave, thanks to case when id = x then pos=1…
    whens = Case(*[When(id=id, then=Value(pos)) for (pos, id) in enumerate(ids)])

    # We prefer to have real django orm objects instead of algolia objects, to be able to use the paginator
    articles = Article.objects.filter(id__in=ids).order_by(whens)
    p = Paginator(articles, 4)
    page = request.GET.get('page', 1)

    return render(request, 'article/search.html', {'page': p.get_page(page), 'query': query})
示例#12
0
    def test_update_records(self):
        Website.objects.create(name='Algolia', url='https://www.algolia.com')
        Website.objects.create(name='Google', url='https://www.google.com')
        Website.objects.create(name='Facebook', url='https://www.facebook.com')
        Website.objects.create(name='Facebook', url='https://www.facebook.fr')
        Website.objects.create(name='Facebook', url='https://fb.com')

        qs = Website.objects.filter(name='Facebook')
        update_records(Website, qs, url='https://facebook.com')
        qs.update(url='https://facebook.com')

        time.sleep(10)
        result = raw_search(Website, 'Facebook')
        self.assertEqual(result['nbHits'], qs.count())
        for res, url in zip(result['hits'], qs.values_list('url', flat=True)):
            self.assertEqual(res['url'], url)
示例#13
0
def search(request):
    segmentos = Segmento.objects.all().order_by('descricao')
    areas = Area.objects.all().order_by('descricao')
    qs = request.GET.get('qs', '')
    id_area = request.GET.get('area', '')
    page = request.GET.get('page', '0')

    results = None
    area_descricao = ''
    previous_page = ''
    next_page = ''

    if page:
        next_page = int(page) + 1
        previous_page = int(page) - 1

    if qs:
        params = {'hitsPerPage': 2, 'page': page}
        results = algoliasearch.raw_search(Profissional, qs, params)

    if id_area:
        area = get_object_or_404(Area, id=id_area)
        area_descricao = area.descricao
        results = Profissional.objects.filter(area=area).order_by('nome')

        paginator = Paginator(results, 5)
        page = request.GET.get('page', 1)

        try:
            results = paginator.page(page)
        except PageNotAnInteger:
            results = paginator.page(1)
        except EmptyPage:
            results = paginator.page(paginator.num_pages)

    context = {
        'segmentos': segmentos,
        'areas': areas,
        'results': results,
        'area_descricao': area_descricao,
        'qs': qs,
        'previous_page': previous_page,
        'next_page': next_page,
        'id_area': id_area,
    }

    return render(request, 'contratou/profissional_search.html', context)
示例#14
0
def search(request):
    categories = Category.objects.filter(hidden=False,
                                         parent__isnull=True).order_by('name')
    qs = request.GET.get('qs', '')
    str_category = request.GET.get('category', '')
    page = request.GET.get('page', "0")

    results = None
    cat_name = ""
    next_page = ""
    previous_page = ""

    if page:
        next_page = int(page) + 1
        previous_page = int(page) - 1

    if qs:
        params = {"hitsPerPage": 1, "page": page}
        results = algoliasearch.raw_search(Product, qs, params)

    if str_category:
        cat = get_object_or_404(Category, slug=str_category)
        cat_name = cat.name
        results = Product.objects.filter(categories=cat)

        paginator = Paginator(results, 1)
        page = request.GET.get('page', 1)

        try:
            results = paginator.page(page)
        except PageNotAnInteger:
            results = paginator.page(1)
        except EmptyPage:
            results = paginator.page(paginator.num_pages)

    context = {
        'categories': categories,
        'results': results,
        'cat_name': cat_name,
        'qs': qs,
        'next_page': next_page,
        'previous_page': previous_page,
        'str_category': str_category
    }

    return render(request, 'portal/product_search.html', context)
示例#15
0
def search_query(request, slug):
    try:
        queryset = Products.objects.filter(shop_rel__slug=slug)
        query = request.GET.get("q")
        if query:
            params = {"hitsPerPage": 15}
            queryset = raw_search(Products, query, params)
            queryset = [x for x in queryset["hits"] if x["shop_slug"] == slug]
        else:
            queryset = ProductSerializer(queryset, many=True)
        return Response(
            data={"results": queryset if query else queryset.data},
            status=status.HTTP_200_OK,
        )
    except queryset.DoesNotExist:
        return Response(data={"nothing": "nothing"},
                        status=status.HTTP_404_NOT_FOUND)
示例#16
0
def search(request):
    context = {}
    query_string = request.GET.get('q')
    if query_string:
        # setting custom search result
        results = Service.objects.filter(Q(name__icontains=query_string) |
                                         Q(description__icontains=query_string) |
                                         Q(provider__first_name__contains=query_string) |
                                         Q(provider__last_name__contains=query_string)).distinct()
        context['results'] = results

        # adding algolia search result
        algolia_results = raw_search(Service, query_string)
        context["algolia_results"] = algolia_results

    form = SearchForm(request.GET or None)
    context['form'] = form
    return render(request, 'website/search_result.html', context)
示例#17
0
def search(request):
    categories = models.Category.objects.filter(
        parent__isnull=True).order_by('name')

    qs = request.GET.get('q', '')
    str_category = request.GET.get('categoria', '')
    page = request.GET.get('page', 0)
    results = None
    if qs:
        params = {'hitsPerPage': 1, 'page': page}
        results = algoliasearch.raw_search(models.Product, qs, params)

    if str_category:
        category = get_object_or_404(models.Category, slug=str_category)
        result = models.Product.objects.filter(category=category)
        paginator = Paginator(result, 1)
        page = request.GET.get('page', 1)

        try:
            results = paginator.page(page)

        except EmptyPage:
            results = paginator.page(paginator.num_pages)

    try:
        totalpages = range(results['nbPages'])
    except:
        totalpages = range(1)

    context = {
        'categories': categories,
        'results': results,
        'q': qs,
        'page': page,
        'previous_page': int(page) - 1,
        'next_page': int(page) + 1,
        'nPages': totalpages,
    }
    return render(request, 'portal/search.html', context)
示例#18
0
    def post(self, request, *args, **kwargs):
        filter_string = ''
        if request.is_ajax():
            context = dict()
            if request.POST.get('page'):

                if request.POST.get('filter_string'):
                    search_params = build_search_string(
                        filter_string=request.POST.get('filter_string'),
                        page=request.POST.get('page'))
                else:
                    search_params = build_search_string(
                        page=request.POST.get('page'))
            else:
                params_dict = build_params_dict(request)
                filter_string = get_filter_string(request, params_dict)
                search_params = build_search_string(filter_string)
            query = request.session['query']

            a = raw_search(Property, query, search_params)
            pageNo = a.get('nbPages')
            context['property_list'] = Property.objects.filter(
                id__in=[int(w.get('objectID')) for w in a.get('hits')])
            if not context['property_list'].exists():
                context['result'] = True
            pageNo = range(0, pageNo)
            #pdb.set_trace()
            query = request.session['query']
            pagination = render_to_string('main/includes/navigation.html',
                                          {'pageNo': pageNo})
            result = render_to_string('main/includes/result.html', context)
            return JsonResponse({
                'status': 'success',
                'result': result,
                'pagination': pagination,
                'filter_string': filter_string
            })