Elasticsearch:以.csv /表格式从json中返回特定字段

时间:2019-06-02 02:11:23

标签: python elasticsearch

我是Elasticsearch的新用户,但是我在Splunk中努力完成对我来说很容易的事情。我希望从搜索中的每个事件中获取一些特定字段,但是搜索“命中”输出始终以大json结构返回,这对我来说95%没有用。我使用python请求模块进行搜索,因此我可以在返回时在python中解析我想要的结果,但是我必须访问数百万个事件,并且性能很重要,因此我希望有一种更快的方法。

以下是从Elasticsearch搜索返回的单个事件的示例:

<Response [200]>                                                                             
{                                                                                            
    "hits": {                                                                                
        "hits": [                                                                            
            {                                                                                
                "sort": [
                    1559438581000
                ],      
                "_type": "_doc", 
                "_source": {                                                                 
                    "datapoint": {                                                           
                        "updated_at": "2019-06-02T00:01:02Z",                                
                        "value": 102
                    },  
                    "metadata": {                                                            
                        "id": "AB33",                                            
                        "property_name": "some_property",              
                        "oem_model": "some_model"                                       
                    }
                },  
                "_score": null, 
                "_index": "datapoint-2019.06",                                               
                "_id": "datapoint+4+314372003"                                               
            }, 

我希望搜索仅返回表/.csv/数据框格式的结果,其结果为:update_at,value,id,property_name,oem_model值,如下所示:

2019-06-02T00:01:02Z,102,AB33,some_property,some_model
..... and similar for other events ...

有人知道返回搜索输出后是否可以对Elasticsearch或请求库进行解析而不用json吗?非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

是的,请确保使用源过滤。 Doc here 您将过滤要从查询中返回的字段,因此以这种方式您只能选择有用的字段,然后就不应解析json。在这里看看:

from elasticsearch import Elasticsearch

es = Elasticsearch()

query = {
    "_source": [ "obj1.*", "obj2.*" ], #this is the list of the fields that you would return as a doc
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}
res = es.search(index="your_index_name", body=query)