Appel AJAX avec Elasticsearch Recherche
J'ai été à essayer de comprendre comment correctement les données de la demande d'elasticsearch à l'aide d'un appel AJAX jQuery. Je obtenir une erreur d'analyse ou je vais obtenir tous les documents dans l'index, je suis à la recherche sous.
$(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);
});
});
Voici mon erreur:
{
"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 org.elasticsearch.common.bytes.ChannelBufferBytesReference@779479bb]; }{[GUiivW0TQVSNv2HQyxu8Vw][dicoms][3]: SearchParseException[[dicoms][3]: from[-1],size[-1]: Parse Failure [Failed to parse source [_na_]]]; nested: ElasticSearchParseException[Failed to derive xcontent from org.elasticsearch.common.bytes.ChannelBufferBytesReference@779479bb]; }{[GUiivW0TQVSNv2HQyxu8Vw][dicoms][1]: SearchParseException[[dicoms][1]: from[-1],size[-1]: Parse Failure [Failed to parse source [_na_]]]; nested: ElasticSearchParseException[Failed to derive xcontent from org.elasticsearch.common.bytes.ChannelBufferBytesReference@779479bb]; }{[GUiivW0TQVSNv2HQyxu8Vw][dicoms][4]: SearchParseException[[dicoms][4]: from[-1],size[-1]: Parse Failure [Failed to parse source [_na_]]]; nested: ElasticSearchParseException[Failed to derive xcontent from org.elasticsearch.common.bytes.ChannelBufferBytesReference@779479bb]; }{[GUiivW0TQVSNv2HQyxu8Vw][dicoms][2]: SearchParseException[[dicoms][2]: from[-1],size[-1]: Parse Failure [Failed to parse source [_na_]]]; nested: ElasticSearchParseException[Failed to derive xcontent from org.elasticsearch.common.bytes.ChannelBufferBytesReference@779479bb]; }]",
"status":500
}
EDIT: j'ai tout compris:
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);
}
});
La principale différence entre l'original de votre code et de votre édité code, c'est que vous avez converti votre objet javascript JSON et le passé que dans le $.ajax()'s "données" de la propriété en faisant JSON.stringify(données). Je crois que c'était la clé pour obtenir ce travail.
pourriez-vous poster votre page html entière quelque part?
pourriez-vous poster votre page html entière quelque part?
OriginalL'auteur neurosnap | 2012-10-30
Vous devez vous connecter pour publier un commentaire.
Vous pouvez jeter un oeil ici: https://github.com/dadoonet/devoxxfr_demo/blob/gh-pages/index.html#L512
Il pourrait vous aider à résoudre votre problème.
OriginalL'auteur
Au lieu d'écrire votre appel AJAX, je vous suggérons d'utiliser cet outil appelé Facteur. Facteur a une devise simple -
Ainsi, dans le cas où vous avez de la difficulté à écrire votre ES demandes, ou peut-être vous décidez de ne pas utiliser jQuery AJAX/XHR, et peut-être que vous souhaitez utiliser cURL/Unirest/NSURL et ce n'est pas, vous pouvez simplement utiliser le Facteur générateur de requête d'écrire votre simple Requête Http, puis vous trouverez un lien intitulé code dans la case juste en dessous, et vous pouvez générer des demandes dans la langue de votre choix à l'aide que. Y compris AJAX, oui. Je recommande que vous essayez d'utiliser.
Voici le lien où vous pouvez télécharger Facteur de - https://www.getpostman.com/postman
OriginalL'auteur