2016-11-05 7 views
0

Ich versuche, herauszufinden, wie man die Daten zuzugreifen, die die Multi-Suche-API zurückgeben ES ...Elasticsearch Multi-Suche-API

ich die API bin mit einer Multi-Spiel-Abfrage ausführen und eine MLT-Abfrage. Mit der Multi-Such-API gibt ES ein Array 'Antworten' zurück, das Ergebnisse in der Reihenfolge der Suchanfragen liefert.

Normalerweise würde ich zugreifen nur die Daten wie diese es_return.hits.total (für insgesamt Treffer)

jedoch statt nur Daten wie folgt empfangen:

{ 
    "took": 1, 
    "timed_out": false, 
    "_shards": { 
     "total": 1, 
     "successful": 1, 
     "failed": 0 
    }, 
    "hits": { 
     "total": 11, 
     "max_score": 4.2222037, 
     "hits": [ 
     { 
      "_index": "query-index1", 
      "_type": "autocomplete", 
      "_id": "AVg00s--yzMyH55ObTRt", 
      "_score": 4.2222037, 
      "_source": { 
       "suggestions": "term" 
      } 
     }, 
     { 
      "_index": "query-index1", 
      "_type": "autocomplete", 
      "_id": "AVg00s--yzMyH55ObTRu", 
      "_score": 2.6388774, 
      "_source": { 
       "suggestions": "term 1" 
      } 
     }, 
     { 
      "_index": "query-index1", 
      "_type": "autocomplete", 
      "_id": "AVg00s--yzMyH55ObTRv", 
      "_score": 2.6388774, 
      "_source": { 
       "suggestions": "term 2" 
      } 
     } 
     ] 
    } 
} 

ich jetzt Daten empfangen dies wie:

{ 
    "responses": [ 
     { 
     "took": 66, 
     "timed_out": false, 
     "_shards": { 
      "total": 1, 
      "successful": 1, 
      "failed": 0 
     }, 
     "hits": { 
      "total": 328, 
      "max_score": 2.4221432, 
      "hits": [ 
       { 
        "_index": "dev-4index", 
        "_type": "doc", 
        "_id": "http://www.example.com/something/", 
        "_score": 2.4221432, 
        "_source": {... 

ich es dachte nur so etwas wie dies tun würde es_return.responses.hits.total lösen, aber ich bekomme den Fehler: "kann nicht" total "von undefined lesen.

Wie greife ich auf die es-Daten im neuen Format zu?

Antwort

0

Die es_return.responses ist ein Array, damit Sie jedes Antwortelement per Index referenzieren können.

Also, für den Zugriff auf die Antwort auf die erste multi_match Abfrage, müssen Sie es_return.responses[0].hits.total verwenden und die Reaktion auf die mlt Abfrage für den Zugriff benötigen Sie es_return.responses[1].hits.total zu verwenden.

+0

danke für die klare und prägnante Antwort, habe ich Index vergessen. – user3125823

+0

Super froh, dass es geholfen hat. – Val