Exemple #1
0
    def get(self, request, key):

        fields = set(request.GET.keys())

        body = {
            "size": 0,
            "query": {
                "bool": {
                    "must": [{
                        "term": {
                            "is_in_stock": "true"
                        }
                    }]
                }
            }
        }

        for field in fields:
            values = request.GET.get(field).split(',')
            body['query']['bool']['must'].append({"terms": {field: values}})

        response = es_client.search(index="store",
                                    doc_type="product",
                                    body=body)

        return Response(response, status=status.HTTP_200_OK)
Exemple #2
0
 def get(self, request):
     query = request.GET.get('line', '')
     body = generate_from_pattern(query)
     response = es_client.search(index='store',
                                 doc_type='category,product',
                                 body=body)
     return Response(response['hits']['hits'], status=status.HTTP_200_OK)
Exemple #3
0
    def get(self, request):
        slug = request.GET.get("slug")
        fields = set(request.GET.keys()).difference({'slug', slug})
        body = {
            "size": 0,
            "query": {
                "bool": {
                    "must": [{
                        "term": {
                            "is_in_stock": "true"
                        }
                    }]
                }
            },
            "aggs": {
                "facet": {
                    "terms": {
                        "field": slug,
                        "size": 100000
                    }
                }
            }
        }

        for field in fields:
            values = request.GET.get(field).split(',')
            body['query']['bool']['must'].append({"terms": {field: values}})

        response = es_client.search(index="store",
                                    doc_type="product",
                                    body=body)

        return Response(response)
Exemple #4
0
    def get(self, request):
        slug = request.GET.get("key")
        is_in_stock = request.GET.get('is_in_stock', None)

        values = AttributeValue.objects.filter(attribute__key=slug)
        serializer = AttributeValuePublicSerializer(values, many=True)

        fields = set(request.GET.keys()).difference({'key', slug})
        if is_in_stock is None:
            body = {
                "size": 0,
                "query": {
                    "bool": {
                        "must": [{
                            "term": {
                                "is_in_stock": "true"
                            }
                        }]
                    }
                },
                "aggs": {
                    "facet": {
                        "terms": {
                            "field": slug,
                            "size": 200000
                        }
                    }
                }
            }
        else:
            body = {
                "size": 0,
                "query": {
                    "bool": {
                        "must": []
                    }
                },
                "aggs": {
                    "facet": {
                        "terms": {
                            "field": slug,
                            "size": 200000
                        }
                    }
                }
            }

        for field in fields:
            values = request.GET.get(field).split(',')
            body['query']['bool']['must'].append({"terms": {field: values}})

        response = es_client.search(index="store",
                                    doc_type="product",
                                    body=body)

        return Response({
            'counts': response['aggregations']['facet']['buckets'],
            'values': serializer.data,
        })
Exemple #5
0
 def __getitem__(self, key):
     self._body['from'] = key.start
     self._body['size'] = self._page_size
     results = es_client.search(
         doc_type=self._doc_type,
         index=self._index,
         body=self._body
     )
     return results['hits']['hits']
Exemple #6
0
 def __init__(self, body, index, doc_type, es_client, page_size):
     self._body = body
     self._index = index
     self._doc_type = doc_type
     self._es_client = es_client
     self._page_size = page_size
     self._results = es_client.search(
         doc_type=self._doc_type,
         index=self._index,
         body=self._body
     )