2017-07-12 2 views
2

Ich schreibe gerade eine Website in JavaScript, die verschiedene Felder aus Daten in ElasticSearch grafisch darstellt, und ich bin auf ein seltsames Problem gestoßen. (Ich möchte Kibana aus verschiedenen Gründen nicht verwenden.)ElasticSearch.js Suchabfrage gibt 0 Treffer zurück, aber generierte URL enthält richtige Treffer

Meine Suchanfrage in JavaScript hat Treffer bis vor einiger Zeit korrekt zurückgegeben. Ich habe keine Änderungen daran vorgenommen, aber plötzlich gibt die Abfrage keine Treffer zurück. Wenn ich jedoch der vom Anruf erzeugten URL folge, erscheinen die gewünschten Treffer.

Hier ist die Abfrage:

 client.search({ 
     index: "chamber-data", 
     type: "Soak1", 
     size: 1000, 
     scroll: "30s", 
     sort: ["_doc"], 
     _source: ["@timestamp", "datetime", [...this.props.fields]], 
     body: { 
      query: { 
       bool: { 
        filter: { 
         range: { 
          "datetime": { 
           lte: "now", 
           gte: "now-12H" 
          } 
         } 
        } 
       } 
      } 
     } 
    }).then(this.process_promise, this.handle_error); 

Hier ist, was das Skript mich in der Konsole meiner Website gibt:

{ 
"_scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAA1NrFlZYTEJLYW12UUFTaWowMllJZVcyalEAAAAAAANTbRZWWExCS2FtdlFBU2lqMDJZSWVXMmpRAAAAAAADU28WVlhMQkthbXZRQVNpajAyWUllVzJqUQAAAAAAA1NsFlZYTEJLYW12UUFTaWowMllJZVcyalEAAAAAAANTbhZWWExCS2FtdlFBU2lqMDJZSWVXMmpR", 
"took": 0, 
"timed_out": false, 
"_shards": { 
    "total": 5, 
    "successful": 5, 
    "failed": 0 
}, 
"hits": { 
    "total": 0, 
    "max_score": null, 
    "hits": [] 
} 

}

Und hier ist es, was die URL gibt mir:

{"_scroll_id":"DnF1ZXJ5VGhlbkZldGNoBQAAAAAAA1N2FlZYTEJLYW12UUFTaWowMllJZVcyalEAAAAAAANTdBZWWExCS2FtdlFBU2lqMDJZSWVXMmpRAAAAAAADU3cWVlhMQkthbXZRQVNpajAyWUllVzJqUQAAAAAAA1NzFlZYTEJLYW12UUFTaWowMllJZVcyalEAAAAAAANTdRZWWExCS2FtdlFBU2lqMDJZSWVXMmpR", 
    "took":9, 
    "timed_out":false, 
    "_shards":{"total":5,"successful":5,"failed":0}, 
    "hits": 
    {"total":107565,"max_score":null,"hits":[...]} 
    } 

Ich habe absolut keine Ahnung, was passiert ist, und ich habe keine Ahnung, wie ich es lösen soll. Hat jemand Gedanken?

+0

Ich verstehe nicht, was der Unterschied zwischen Ihren Suchen ist. Ich weiß nicht, was "die URL mir gibt" damit gemeint ist. Vielleicht können Sie ausführlicher sein. Können Sie auch Beispiele für Ihre curl-Abfrage angeben, damit Sie überprüfen können, ob sie im Befehl reproduzierbar sind, ohne zwei verschiedene HTTP-Clients aufzurufen? – alr

+0

Zusätzlich zu @alr können Sie bestätigen, dass die Abfrage, die Sie manuell und von Ihrem js-Programm verwenden, tatsächlich die gleichen sind, wenn sie an den ES-Server gesendet werden? – Adonis

+0

Ich habe die gleiche Situation, wo die gleiche Abfrage (sagen wir, eine 'matchAll'-Abfrage) über den js-Client und einen externen Client (Postman) gibt Null Treffer in einem Fall und ein Bündel in der Sekunde. Wo können Sie Ihr Problem lösen? Ich kann andere APIs (create/delete index, bulk, ...) über den Client js mit Erfolg aufrufen. –

Antwort

0

In meinem Fall habe ich ein Testskript, das eine Reihe von Datensätzen mit der bulk API lädt und ES direkt danach fragt. Alles ok mit dem externen/manuellen Client (Postman), aber keine Treffer mit dem js-Client, der im Skript direkt nach den Einfügungen aufgerufen wird.

Das Problem liegt in der Tatsache, dass der Index needs to be refreshed für die neu eingefügten Dokumente bei der Suche angezeigt werden (das gleiche gilt für Index, Update und Delete API).

Ich löste zwingen aktualisieren nach dem Massenaufruf.

client.bulk({ 
    refresh: true, // This is the important part 
    body: [ 
    // Bunch of documents/actions 
    ] 
}, function (err, resp) { 
    // ... 
}) 
Verwandte Themen