elasticsearch - 在 Elasticsearch 中使用数字作为类型
问题描述
我将在 elasticsearch 上存储事务日志。我是 ELK 堆栈的新手,不确定如何在 ELK 堆栈上实现它。我的事务是顺序打印日志行(upserts),而不是将这些记录到文件中,我想将它们存储在 ElastichSearch 上,稍后我将通过我创建的 transactionId 查询日志。
通常查询的 URI 将是
/书店/书籍/_search
但就我而言,它必须像
/transactions/transactionId/_search
因为我不想将行存储为附加到单个事务记录的数组,但我不确定这是否是在每个事务开始时创建新类型的好习惯。我什至不确定这是否可能。
您能否就在 elasticsearch 上存储这些交易数据提供建议?
解决方案
如果您想使用类似的 URI 进行查询/transactions/transactionId/_search
,这意味着您计划在每次新的 transactionid 出现时创建多种类型。现在,除了这是一个糟糕的设计之外,索引中甚至不可能有多个类型(发布版本 5.XI 猜测)并且类型自版本 7.X 以来已被完全删除。一种解决方法是在创建时使用 transactionId 本身作为文档 ID。然后,您可以通过查询获取与一个 transactionId 关联的日志GET transactions/transactionId
(尽管了解文档 ID 的长度限制),但这可能会导致另一个问题,即同一事务可以有多个日志,因此每个日志条目都有相同的 id 只会覆盖前一个条目。这里最好的解决方案是更改查询这些记录的方式。
为此,您可以将 transactionId 作为 json 正文中的字段之一,以及在插入时创建的时间戳(让 ES 创建具有自动生成的 id 的文档),然后查询与事务关联的所有日志,例如:
POST transactions/_search
{
"sort": [
{
"createdDate": {
"order": "asc"
}
}
],
"query":{
"bool":{
"must":[
{
"term":{
"transactionId.keyword":"<transaction id>"
}
}
]
}
}
}
希望这可以帮助
推荐阅读
- algorithm - 如何有效地将大范围的索引值从 1 翻转到 0,反之亦然
- javascript - Material-UI 覆盖 .MuiDataGrid-columnsContainer CSS
- r - 处理 xts - R 中日期变化的计算
- javascript - 更多阅读 ngx-datatable-columns
- linux - FFmpeg Drawbox 错误?
- mysql - 错误代码:1054。尝试 JOIN 两个表时,“on 子句”中的未知列“diagnoses.PATIENT_IDENTIFIER”
- sql - 使用 SQL 计算排列
- java - io.reactivex.exceptions.UndeliverableException 异常无法交付给消费者,因为它已经取消/处置
- php - .htaccess 规则重定向到默认 API 版本
- tcp - channel.close() 是否真的通过 channel.eventLoop().scheduleAtFixedRate() 停止计划任务?