0

J'ai commencé avec ce [tutoriel] [1], mais je n'ai pas réussi à comprendre comment le configurer pour la recherche dans l'application android. Jusqu'à présent, j'ai fait un modèle en utilisant le cadre django REST, puis utilisé retrofit dans android pour faire GET, PUT et POST demandes.Impossible de configurer haystack-elasticsearch pour la recherche en android

Maintenant, je veux rechercher mes produits par leur nom. Le tutoriel ci-dessus essayait de faire une page de recherche HTML et tapez la requête dans cette page HTML, mais je veux un point de terminaison où je peux envoyer GET demandes de recherche.

S'il vous plaît aidez-moi à comprendre comment le faire.

class Product(models.Model): 
     name=models.CharField(max_length=50) 
     mrp = models.DecimalField(max_digits=20) 
     company=models.CharField(max_length=100) 

class ProductSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = Product 
     fields = ('id', 'name', 'mrp', 'company') 

class ProductViewSet(viewsets.ModelViewSet): 
    queryset = Product.objects.all() 
    serializer_class = ProductSerializer 

    permission_classes = (permissions.IsAuthenticatedOrReadOnly,) 

class ProductIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 
    name = indexes.CharField(model_attr='name') 
    company=indexes.CharField(model_attr='company') 

    def get_model(self): 
     return Product 

    def index_queryset(self, using=None): 
     """Used when the entire index for model is updated.""" 
     return self.get_model().objects.all() 

Maintenant, comment dois-je utiliser ce ItemIndex pour faire url recherche avec botte de foin. [1]: http://django-haystack.readthedocs.io/en/v2.6.0/tutorial.html

Répondre

0

à DRF:

class ProductViewSet(viewsets.ModelViewSet): 
    queryset = Product.objects.all() 
    serializer_class = ProductSerializer 
    permission_classes = (IsAuthenticated,) 

    @list_route(methods=['POST']) 
    def search(self, request): 
     key = request.data['key'] 
     queryset = Product.objects.filter(name__icontains=key) 
     serializer = ProductSerializer(queryset, many=True) 
     return Response(serializer.data) 

dans la démo Android Okhttp3:

RequestBody requestBody = new FormBody.Builder() 
      .add("key", ProductName) 
      .build(); 
    Request request = new Request.Builder() 
      .post(requestBody) 
      .url(Constants.ProductSearch) 
      .build(); 

    HttpClientUtil.getClient().newCall(request).enqueue(new Callback() { 
     @Override 
     public void onFailure(Call call, IOException e) {} 

     @Override 
     public void onResponse(Call call, final Response response) throws IOException { 
      final String data = response.body().string(); 
      Log.e("Http",data); 
     } 
    }); 
+0

Je pouvais comprendre comment utiliser ProductIndex avec ce ProductViewSet, pouvez-vous expliquer en détail. Merci pour l'aide. –

+0

vous voulez obtenir la clé avec la méthode GET dans DRF? – Ykh

+0

Non, je veux faire un moteur de recherche pour Android en utilisant la recherche haystack-élastique. Quelque chose comme drf-haystack. –