2 Pluspunkte 0 Minuspunkte

Ich mache über einen Flask Server Abfragen in Elasticsearch und bis jetzt funktioniert auch alles. Jetzt will ich einen neuen Endpunkt (Flask) hinzufügen um Details zu einem einzelnen Ergebnis anzuzeigen. Das ist die Flask Funktion.

@app.route("/hit/<hit_id>", methods=["GET"])
def get_hit(hit_id):
    index = request.args.get("index", "*winlog*")  
    try:
        result = es.get(index=index, id=hit_id)
        return jsonify(result)
    except Exception as e:
        return jsonify({"error": str(e)}), 404

Ich bekomme aber immer einen HTTP 404 Fehler. Was mache ich falsch?

von  

1 Antwort

0 Pluspunkte 0 Minuspunkte

Weil eine Abfrage auf das Feld _id mit es.get() nur funktioniert, wenn du den genauen Index kennst. Da du wahrscheinlich mehrere Indizes hast (winlog*), musst du stattdessen eine search Abfrage machen.

@app.route("/hit/<hit_id>", methods=["GET"])
def get_hit(hit_id):
    index = "winlogbeat-*"  # Falls du mehrere Indizes hast

    query = {
        "query": {
            "term": {
                "_id": hit_id
            }
        }
    }

    try:
        result = es.search(index=index, body=query)
        if result["hits"]["total"]["value"] > 0:
            return jsonify(result["hits"]["hits"][0])  # Ersten Treffer zurückgeben
        else:
            return jsonify({"error": "Kein Dokument gefunden"}), 404
    except Exception as e:
        return jsonify({"error": str(e)}), 500
von (1.3k Punkte)