2017-10-15 14 views
0

Je veux utiliser Ajax pour récupérer des données de elasticsearch lorsque la requête a un filtre. J'utilise GET.Ajax 400 mauvaise demande à partir d'une requête filtrée élastique recherche

Mon code est le suivant:

<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script> 
<script> 
    $(document).ready(function(){ 
     $.ajax({ 
      type: 'GET', 
      url : 'HOST/tomo2o/shop/_search', 
      crossDomain: true, 
      data: JSON.stringify({"query":{"match":{"catlev1":"Motors"}}}), 
      contentType:'application/json; charset=utf-8', 
      dataType: 'json', 
      success: function(data) { 
       console.log(data); 
      }, 
      error: function(e) { 
       console.log(e); 
      } 
     }); 
    }); 
</script> 

Je ne les 3 choses que les gens suggère de le faire:

  1. stringify le filtre JSON
  2. définir le type de données JSON
  3. ensemble le type de contenu en tant qu'application/json

Mais je reçois toujours l'erreur suivante:

GET HOST/tomo2o/shop/_search?{%22query%22:{%22match%22:{%22catlev1%22:%22Motors%22}}} 400 (Bad Request) 

Répondre

1

Si vous voulez passer un DSL query in the query string vous devez passer dans le paramètre source et également ajouter un paramètre source_content_type pour indiquer le type de contenu

Ainsi vous pouvez le faire comme ceci:

$.ajax({ 
     type: 'GET', 
     url : 'HOST/tomo2o/shop/_search', 
     crossDomain: true, 
     data: { 
      source: JSON.stringify({"query":{"match":{"catlev1":"Motors"}}}), 
      source_content_type: "application/json" 
     }, 
     contentType:'application/json; charset=utf-8', 
     dataType: 'json', 
     success: function(data) { 
      console.log(data); 
     }, 
     error: function(e) { 
      console.log(e); 
     } 
    }); 
+0

beaucoup merci l'homme, fonctionne comme prévu – woshitom

+0

Awesome, heureux cela a aidé! – Val