2012-10-30 12 views
13

Próbowałem dowiedzieć się, jak poprawnie żądania danych z elasticsearch za pomocą wywołania jQuery AJAX. Otrzymuję błąd parsowania lub każdy dokument znajduję się w indeksie, którego szukam.Wywołanie AJAX z wyszukiwaniem Elasticsearch

$(document).ready(function() { 

    var timer = null; 
    function dicom_search() { 
     var box = $('#s_box').val(); 

     $.ajax({ 
      url: 'http://localhost:9200/dicoms/dicoms/_search', 
      type: 'POST', 
      //contentType: 'application/json; charset=UTF-8', 
      crossDomain: true, 
      dataType: 'json', 
      data: { 
       query:{match:{_all:$('#s_box').val()}}, 
       pretty: true, 
       fields: '_id' 
      }, 
      success: function(response) { 
       var data = response.hits.hits; 
       var doc_ids = []; 
       var source = null; 
       var content = ''; 

       if (data.length > 0) { 
        for (var i = 0; i < data.length; i++) { 
         source = data[i].fields; 
         doc_ids.push(source._id); 
         content = content + ' ' + source._id + '<br />'; 
        } 

        $('#res').removeClass('text-error').addClass('text-success').html(content); 
       } else { 
        $('#res').removeClass('text-success').addClass('text-error').html('No results found.'); 
       } 


      } 
     }); 
    } 

    $('#s_box').live('keyup', function() { 

     if (timer) { 
      clearTimeout(timer); 
     } 
     timer = setTimeout(dicom_search, 600); 

    }); 
}); 

Oto mój błąd:

{ 
    "error":"SearchPhaseExecutionException[Failed to execute phase [query], total failure; shardFailures {[GUiivW0TQVSNv2HQyxu8Vw][dicoms][0]: SearchParseException[[dicoms][0]: from[-1],size[-1]: Parse Failure [Failed to parse source [_na_]]]; nested: ElasticSearchParseException[Failed to derive xcontent from [email protected]9bb]; }{[GUiivW0TQVSNv2HQyxu8Vw][dicoms][3]: SearchParseException[[dicoms][3]: from[-1],size[-1]: Parse Failure [Failed to parse source [_na_]]]; nested: ElasticSearchParseException[Failed to derive xcontent from [email protected]9bb]; }{[GUiivW0TQVSNv2HQyxu8Vw][dicoms][1]: SearchParseException[[dicoms][1]: from[-1],size[-1]: Parse Failure [Failed to parse source [_na_]]]; nested: ElasticSearchParseException[Failed to derive xcontent from [email protected]9bb]; }{[GUiivW0TQVSNv2HQyxu8Vw][dicoms][4]: SearchParseException[[dicoms][4]: from[-1],size[-1]: Parse Failure [Failed to parse source [_na_]]]; nested: ElasticSearchParseException[Failed to derive xcontent from [email protected]9bb]; }{[GUiivW0TQVSNv2HQyxu8Vw][dicoms][2]: SearchParseException[[dicoms][2]: from[-1],size[-1]: Parse Failure [Failed to parse source [_na_]]]; nested: ElasticSearchParseException[Failed to derive xcontent from [email protected]9bb]; }]", 
    "status":500 
} 

EDIT: I zdobione:

var data = { 
      query: { 
       match: { 
        _all: $('#s_box').val() 
       } 
      }, 
      fields: '_id' 
     }; 

$.ajax({ 
      url: 'http://localhost:9200/dicoms/dicoms/_search', 
      type: 'POST', 
      //contentType: 'application/json; charset=UTF-8', 
      crossDomain: true, 
      dataType: 'json', 
      data: JSON.stringify(data), 
      success: function(response) { 
       var data = response.hits.hits; 
       var doc_ids = []; 
       var source = null; 
       var content = ''; 

       if (data.length > 0) { 
        for (var i = 0; i < data.length; i++) { 
         source = data[i].fields; 
         doc_ids.push(source._id); 
         content = content + ' ' + source._id + '<br />'; 
        } 

        $('#res').removeClass('text-error').addClass('text-success').html(content); 
       } else { 
        $('#res').removeClass('text-success').addClass('text-error').html('No results found.'); 
       } 


      }, 
      error: function(jqXHR, textStatus, errorThrown) { 
       var jso = jQuery.parseJSON(jqXHR.responseText); 
       error_note('section', 'error', '(' + jqXHR.status + ') ' + errorThrown + ' --<br />' + jso.error); 
      } 
     }); 
+3

Kluczową różnicą między oryginalnego kodu i edytowanego kodu jest to, że przekształcone JavaScript obiektu do JSON i podał, że Into the $ .ajax() 's właściwość "data", wykonując JSON.stringify (dane). Uważam, że to był klucz do tego, aby to zadziałało. –

+0

Czy mógłbyś gdzieś umieścić swoją stronę html? –

Odpowiedz

0

Zamiast pisać twoje wywołanie AJAX, proponuję użyć tego narzędzia o nazwie Listonosza. Listonosz ma prostą dewizę -

Making API development easy

Tak więc w przypadku wystąpienia problemów pisanie ES żądań, czy może nie zdecyduje się użyć jQuery AJAX/XHR, a może chcesz użyć cURL/Unirest/bibliotece NSURL i co nie, możesz po prostu użyć budowniczego żądania Postmana, aby zapisać swoje proste żądanie HTTP, następnie znajdziesz link o nazwie kod w polu poniżej, i możesz generować żądania w wybranym języku, używając tego . W tym AJAX, tak. Więc polecam spróbować tego użyć.

Oto link gdzie można pobrać listonosz z - https://www.getpostman.com/postman

Powiązane problemy