2017-03-15 5 views
0

Mein Ziel ist es, maximale Wert in einem Feld zu finden und ein anderes Feld in diesem gefundenen Dokument zu drucken. Meine Abfrage so weit:ElasticSearch Query - Drucken Sie bestimmte Feld basierend auf anderen Feld

{ 
     "fields": ["text"], //NOT WORKING 
    "query": { 
    "query_string": { 
     "query": "_type:bmw AND _exists_:car_type", 
     "analyze_wildcard": True 
    } 
    }, 
    "size": 0, 
    "aggs": { 
    "2": { 
     "terms": { 
     "field": "compound", 
     "size": 5, 
     "order": { 
      "2-orderAgg": "desc" 
     } 
     }, 
     "aggs": { 
     "2-orderAgg": { 
      "max": { 
      "field": "compound" 
      } 
     } 
     } 
    } 
    } 
} 

Ergebnis ist

'buckets': [{'doc_count': 1, '2-orderAgg': {'value': 0.8442}, 'key': 0.8442}, {'doc_count': 1, '2-orderAgg': {'value': 0.7777}, 'key': 0.7777}, {'doc_count': 1, '2-orderAgg': {'value': 0.7579}, 'key': 0.7579}, {'doc_count': 1, '2-orderAgg': {'value': 0.6476}, 'key': 0.6476}, {'doc_count': 1, '2-orderAgg': {'value': 0.6369}, 'key': 0.6369}] 

Jetzt brauche ich text Feld Druck in dem Dokument compound Wert 0,8442 enthält und so weiter .. Vielen Dank für Ihre Beratung.

Antwort

0

Ich habe dies mit einer kleinen Workaround erreicht. Es ist nicht schön, aber am Ende bekomme ich, was ich wollte. Erstens habe ich die Antwort von der ersten Abfrage verwendet. Dann habe ich alle keys aus diesem Wörterbuch genommen und neue Abfrage durchgeführt, um bestimmte Dokumente id zu finden.

{ 
    "size": 0, 
    "query": { 
    "query_string": { 
     "analyze_wildcard": True, 
     "query": "_type:bmw AND compound:"+str(0.8442)+" AND _exists_:car_type" 
    } 
    }, 
    "aggs": { 
    "3": { 
     "terms": { 
     "field": "id_str", 
     "size": 20, 
     "order": { 
      "_count": "desc" 
     } 
     } 
    } 
    } 
} 

als durch Reaktion durchlaufen und Dokument dieses id Feld suchen

for y in res1: 
    res3 = es.search(index='indexname', body={ 
         "size" : 1, 
         "query": { 
         "bool": { 
          "must": [ 
          { 
           "match": { 
           "id_str": y['key'] 
           } 
          } 
          ] 
         } 
         } 
        }) 
        for x in res3['hits']['hits']: 
         print (x['_source']['text']) 

jetzt führen ist

Diamond stitch leather is a great addition to any custom vehicle. Prices start from 2k! @bmw i8 getting under car... 

, welcher Text ist das, was ich wollte.

Verwandte Themen