我正在尝试为我的数据添加时间戳,使用elasticsearch-py批量索引,然后使用kibana显示数据。
我的数据显示在kibana中,但我的时间戳没有被使用。当我在配置索引模式后进入“发现”选项卡时,我得到0结果(是的,我尝试调整搜索时间)。
这是我的批量索引json的样子:
{'index':
{'_timestamp': u'2015-08-11 14:18:26',
'_type': 'webapp_fingerprint',
'_id': u'webapp_id_redacted_2015_08_13_12_39_34',
'_index': 'webapp_index'
}
}
****JSON DATA HERE***
这将被elasticsearch接受并将导入Kibana,但_timestamp字段实际上不会被编入索引(在“时间字段名称”下配置索引模式时,它会显示在下拉列表中)。
我也尝试过像这样格式化metaField:
{'index': {
'_type': 'webapp_fingerprint',
'_id': u'webapp_id_redacted_2015_08_13_12_50_04',
'_index': 'webapp_index'
},
'source': {
'_timestamp': {
'path': u'2015-08-11 14:18:26',
'enabled': True,
'format': 'YYYY-MM-DD HH:mm:ss'
}
}
}
这也行不通。
最后,我尝试在索引中包含_timestamp字段并应用格式,但我在弹性搜索时遇到错误。
{'index': {
'_timestamp': {
'path': u'2015-08-11 14:18:26',
'enabled': True,
'format': 'YYYY-MM-DD HH:mm:ss'
},
'_type': 'webapp_fingerprint',
'_id': u'webapp_id_redacted_2015_08_13_12_55_53',
'_index': 'webapp_index'
}
}
错误是:
elasticsearch.exceptions.TransportError: TransportError(500,u'IllegalArgumentException[Malformed action/metadata line [1], expected a simple value for field [_timestamp] but found [START_OBJECT]]')
非常感谢任何人可以提供的帮助。如果我没有充分解释这个问题,我会道歉。如果我需要澄清更多,请告诉我。感谢。
答案 0 :(得分:5)
修正了我自己的问题。基本上,我需要在创建索引时为时间戳添加映射。
request_body = {
"settings" : {
"number_of_shards": 1,
"number_of_replicas": 0
},
"mappings" : {
"_default_":{
"_timestamp":{
"enabled":"true",
"store":"true",
"path":"plugins.time_stamp.string",
"format":"yyyy-MM-dd HH:m:ss"
}
}
}
}
print("creating '%s' index..." % (index_name))
res = es.indices.create(index = index_name, body = request_body)
print(" response: '%s'" % (res))
答案 1 :(得分:2)
在最新版本的Elasticsearch中,仅使用PUT / POST API和ISOFORMAT字符串即可。
import datetime
import requests
query = json.dumps(
{
"createdAt": datetime.datetime.now().replace(microsecond=0).isoformat(),
}
)
response = requests.post("https://search-XYZ.com/your-index/log", data=query,
headers={'Content-Type': 'application/json'})
print(response)