Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
<img src="//i.stack.imgur.com/RUiNP.png" height="16" width="18" alt="" class="sponsor tag img">elasticsearch 使用纳秒时间戳将文档批量注入到弹性搜索_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Kibana_Aws Elasticsearch - Fatal编程技术网 elasticsearch 使用纳秒时间戳将文档批量注入到弹性搜索,elasticsearch,kibana,aws-elasticsearch,elasticsearch,Kibana,Aws Elasticsearch" /> elasticsearch 使用纳秒时间戳将文档批量注入到弹性搜索,elasticsearch,kibana,aws-elasticsearch,elasticsearch,Kibana,Aws Elasticsearch" />

elasticsearch 使用纳秒时间戳将文档批量注入到弹性搜索

elasticsearch 使用纳秒时间戳将文档批量注入到弹性搜索,elasticsearch,kibana,aws-elasticsearch,elasticsearch,Kibana,Aws Elasticsearch,我正在尝试使用ElasticSearch 7.1(实际上是7.0之后)提供的最新纳秒支持。不知道如何正确地执行此操作 在7.0之前,ElasticSearch只支持毫秒的时间戳,我使用_bulkAPI注入文档 #将大量博文发送到弹性搜索 def es_批量插入(日志行,批量大小=1000): headers={'Content-Type':'application/x-ndjson'} 而日志行: 批次,日志行=日志行[:批次大小],日志行[批次大小:] 批处理='\n'。加入([x.es\U

我正在尝试使用ElasticSearch 7.1(实际上是7.0之后)提供的最新纳秒支持。不知道如何正确地执行此操作

在7.0之前,ElasticSearch只支持毫秒的时间戳,我使用_bulkAPI注入文档

#将大量博文发送到弹性搜索
def es_批量插入(日志行,批量大小=1000):
headers={'Content-Type':'application/x-ndjson'}
而日志行:
批次,日志行=日志行[:批次大小],日志行[批次大小:]
批处理='\n'。加入([x.es\U post\U批处理中x的有效负载])+'\n'
request=AWSRequest(method='POST',url=f'{ES_HOST}/_bulk',data=batch,headers=headers)
SigV4Auth(boto3.Session().get_-credentials(),'es','eu-west-1')。添加_-auth(请求)
session=urlib3session()
r=会话.send(请求.prepare())
如果r.状态\ U代码>299:
引发异常(f'从Elasticsearch:{r.text}'收到错误响应)
日志索引是每天生成的

#例如:
#log-20190804
#log-20190805
def es_索引(自):
当前日期=datetime.strftime(datetime.now(),“%Y%m%d”)
返回f'{self.name}-{current_date}'
时间戳以纳秒为单位“2019-08-07T23:59:01.193379911Z”,它通过7.0之前的Elasticsearch自动映射到日期类型

"timestamp": {
    "type": "date"
},
现在我想将timestamp字段映射到“date\u nanos”类型。从中,我认为在调用ES_bulk_insert()函数上载文档之前,需要创建具有正确映射的ES索引

GET https://{es_url}/log-20190823
If not exist (return 404)
PUT https://{es_url}/log-20190823/_mapping
{
 "properties": {
    "timestamp": {
      "type": "date_nanos" 
    }
  }
}
...
call es_bulk_insert()
...
我的问题是:
1.如果我不重新映射旧数据(例如:log-20190804),那么时间戳将有两个映射(data vs data_nano),当我使用Kibana搜索日志时会有冲突吗?
2.我没有看到很多关于使用这个新功能的帖子,这会对性能造成很大影响吗?有人在prod中使用过这个吗?
3.不确定是否可以按纳秒正确排序,将尝试


谢谢

你是对的:对于
date\u nanos
你需要显式地创建映射-否则动态映射将返回到
date

Kibana在7.3中一般支持
date\u nano
,这一点也是正确的;虽然相关的票是IMO

然而,排序还不能正常工作。这是因为
date
(毫秒精度)和
date\u nanos
(纳秒精度)都表示为从epoche开始算起的很长时间。因此,第一个值为1546344630124,第二个值为1546344630123456789-这并没有给出预期的排序顺序

在Elasticsearch中,有一个用于搜索
“数值类型”:“date\u nanos”
,可以将两者转换为纳秒精度,从而正确排序(在7.2中添加)。但是,该参数尚未在Kibana中使用。我有


对于性能:最新版本。显然,这会带来开销(包括文档大小),因此,如果您确实需要,我只会使用更高的精度。

谢谢您提出一个有趣的问题。我现在把它变成了一篇博客文章,里面有一些额外的信息,因为我可以看到这个问题再次出现: