我是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吗?非常感谢您的帮助。
答案 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)