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

现在我需要打印text文档中包含compound值 0.8442 等的字段。谢谢您的建议。

4

1 回答 1

0

我通过一个小的解决方法实现了这一点。它不漂亮,但最终我得到了我想要的。首先,我使用了第一个查询的响应。比我keys从那些字典中获取所有内容并执行新查询以查找某些文档的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"
        }
      }
    }
  }
}

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

现在的结果是

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

这是我想要的文字。

于 2017-03-16T07:27:27.437 回答