2017-03-15 6 views
0

내 목표는 한 필드에서 최대 값을 찾고이 발견 된 문서에서 다른 필드를 인쇄하는 것입니다. 지금까지 내 쿼리 :탄성 검색 쿼리 - 다른 필드를 기반으로 특정 필드 인쇄

{ 
     "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" 
      } 
     } 
     } 
    } 
    } 
} 

결과

'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}] 

가 지금은 문서 등 compound 값 0.8442을 포함에 text 필드를 인쇄해야 .. 당신의 조언을 주셔서 감사합니다.

답변

0

나는 작은 workaroud로 이것을 달성했다. 그것은 꽤 아니지만 결승전에서 나는 내가 원하는 것을 얻는다. 먼저 첫 번째 쿼리의 응답을 사용했습니다. 그 사전에서 모든 keys을 움켜 쥐고 새로운 쿼리를 수행하여 특정 문서의 id을 찾습니다. 응답을 반복하고

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']) 

지금 결과이 id 필드를 기준으로 문서를 검색보다

{ 
    "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" 
     } 
     } 
    } 
    } 
} 

내가 원하는 것을 텍스트 인

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

입니다.