【发布时间】:2016-05-01 17:00:01
【问题描述】:
我正在使用 elasticsearch 存储 XBRL JSON。
This xBRL-JSON OIM spec 描述了oim:period 属性:
否则,代表 {interval} 的 ISO 8601 时间间隔 属性,以下列形式之一表示:
/
/
/
其中
和 根据xsd:dateTime数据类型有效, 根据xsd:duration有效。
arelle's plugin 的示例如下所示:
- 2016-01-01T00:00:00/PT0S
- 2015-01-01T00:00:00/P1Y
我注意到 arelle 的插件专门生成这种格式:
- /
我的问题
有没有办法在 elasticsearch 中至少将 <start> 部分保存为日期类型?
我的想法:
仅弹性搜索(我的偏好)
- 使用 自定义日期格式,该格式预期
/<duration>部分,但忽略它- 我还没有检查 Joda;如果日期格式中的字符不是特殊字符的一部分,它会忽略字符吗?像“/”分隔符或任何持续时间值之前的“P”(如上面的
PT0S和P1Y)? -
EDIT 所以单引号字符转义文字;这工作
yyyy'/P'将接受一个值'2015/P'。但是,其余的持续时间可能会更加动态 - 回复:动态; Joda 会接受正则表达式或通配符,如“\d”或“+”限定符,以便我可以忽略 所有
P之后的可能变化吗?
- 我还没有检查 Joda;如果日期格式中的字符不是特殊字符的一部分,它会忽略字符吗?像“/”分隔符或任何持续时间值之前的“P”(如上面的
- 使用字符过滤器去除
/<duration>部分,然后只保存<start>作为日期时间。但我不知道字符过滤器是否发生之前保存为类型:日期。如果他们不这样做,'/` 部分不会被剥离,我也不会传递有效的日期字符串。 - 不要使用日期类型:使用模式tokenizer在
/上拆分,至少这两部分会保存为单独的token。但不能使用日期数学。 - 使用转换;尽管这似乎已被弃用。我读到了关于使用
copy_to的信息,但这似乎合并术语,我想打破这个术语 - 某种插件?也许一个插件将完全支持 OIM 规范描述的这种“间隔”数据类型......也许一个插件将存储其单独的部分......?
更改我的应用程序(如果可能,我更喜欢使用仅弹性搜索技术)
- 我可以编辑这个插件或制作我自己的插件,它只使用
<start>和<end>部分,并将两者保存到单独的字段中;- 但这违反了 OIM 规范,该规范规定它们应该组合在一个单个字段中
- 此外,表达“即时”事实可能很尴尬(没有持续时间;上面的
PT0S示例);我想我只是对end属性使用与start属性相同的值......我猜这并不比0 长度持续时间(PT0S)更尴尬。
【问题讨论】:
标签: datetime elasticsearch arelle