Elasticsearch查询 - 根据其他字段打印某些字段

时间:2017-03-15 20:29:45

标签: python elasticsearch kibana elasticsearch-query

我的目标是在一个字段中找到最大值并在此找到的文档中打印另一个字段。 我的询问到目前为止:

dmsg += ( abs( msg[count] - '0' - ( offset % 10 ) + 10 ) % 10 ) + '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}] 值0.8442的文档中打印text字段,依此类推。感谢您的建议。

1 个答案:

答案 0 :(得分: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... 

这是我想要的文字。