Ich versuche, 2 Solr-Abfragen in einer einzigen for-Schleife zum Abrufen von Minimum und Maximum eines Feldes aus demselben Solr-Core. Die erste Abfrage läuft gut, aber die zweite Abfrage wird jedes Mal für den Wert im letzten Array-Index ausgeführt. Mein Code ist wie folgt:mehrere Solr-Abfragen innerhalb einer for-Schleife
router.route('/might_be_interested').post(function (req, res) {
var merchant_id = req.body.merchant_id;
var data_merchants = []
var count1 = 0;
var count2 = 0;
var data = [];
var final_data = [];
var myStrQuery1 = 'q=merchant_id%3A' + merchant_id + '&wt=json&indent=true&group=true&group.field=category';
client_product.search(myStrQuery1, function (err, merchant_categories) {
if (err) {
console.log(err);
return;
}
var no_of_categories = merchant_categories.grouped.category.groups.length;
for (var i = 0; i < no_of_categories; i++) {
var category = merchant_categories.grouped.category.groups[i].groupValue;
console.log(category);
var myStrQuery2 = 'q=category%3A' + category + '&group=true&group.field=merchant_name&wt=json&indent=true';
client_product.search(myStrQuery2, function (err, other_merchants) {
if (err) {
console.log(err);
return;
}
var no_of_merchants = other_merchants.grouped.merchant_name.groups.length;
console.log(no_of_merchants);
for (var j = 0; j < no_of_merchants; j++) {
var merchants = other_merchants.grouped.merchant_name.groups[j].groupValue;
if (data_merchants.indexOf(merchants) === -1) {
data_merchants.push(merchants)
}
}
if (parseInt(count1) == (parseInt(no_of_categories) - 1)) {
console.log(data_merchants)
var distinct_merchant_count = data_merchants.length;
console.log("distinct_merchant_count")
console.log(distinct_merchant_count)
for (var k = 0; k < distinct_merchant_count; k++) {
var distinct_merchant = data_merchants[k];
console.log(distinct_merchant)
var myStrQuery3 = 'q=merchant_name%3A('+distinct_merchant+')&sort=cashback_value+desc&rows=1&wt=json&indent=true';
client_product.search(myStrQuery3, function (err, max_cashback) {
if (err) {
console.log(err);
return;
}
var myStrQuery4 = 'q=merchant_name%3A('+distinct_merchant+')&sort=cashback_value+desc&rows=1&wt=json&indent=true';
client_product.search(myStrQuery4, function (err, min_cashback) {
if (err) {
console.log(err);
return;
}
var maxcashback = max_cashback.response.docs[0].cashback_value;
var mincashback = min_cashback.response.docs[0].cashback_value;
var logolocation = max_cashback.response.docs[0].logo_location;
var merchantid = max_cashback.response.docs[0].merchant_id;
data.push(maxcashback)
data.push(mincashback)
data.push(logolocation)
data.push(merchantid)
final_data.push(data)
data = [];
if (parseInt(count2) == parseInt(distinct_merchant_count) - 1) {
send_response.sendSuccessData(final_data, res);
} else {
console.log("incerase counter");
count2 = parseInt(count2) + 1;
}
});
});
}
console.log("in end");
} else {
console.log("incerase counter");
count1 = parseInt(count1) + 1;
}
});
}
});
});
Vielen Dank im Voraus. Jeder Vorschlag wird geschätzt.
Sie die Abfrage innerhalb der Callback-Funktion für eine Abfrage für eine Abfrage in einer Schleife aus einer Abfrage für das Ergebnis innerhalb der Callback-Funktion, so dass Sie die for- fallen müssen Schleife, wenn Sie nicht für jede Suche viele Suchen durchführen möchten. Es könnte bessere Wege geben, das zu lösen, was Sie versuchen, wenn Sie das stattdessen ausdrücken. – MatsLindh