在 Elasticsearch 中使用数字作为类型
Using numerics as type in Elasticsearch
我打算将事务日志存储在 elasticsearch 上。我是 ELK 堆栈的新手,不确定我应该如何在 ELK 堆栈上实现它。我的事务是按顺序打印日志行(upserts),而不是将它们记录到文件中,我想将它们存储在 ElastichSearch 上,稍后我将通过我创建的 transactionId 查询日志。
通常查询的URI是
/bookstore/books/_search
但在我的情况下它必须像
/transactions/transactionId/_search
因为我不想将行存储为附加到单个交易记录的数组,但我不确定这是否是在每个交易开始时创建新类型的好习惯。我什至不确定这是否可能。
关于将这些交易数据存储在 elasticsearch 上,您能提供一些建议吗?
如果您想使用 /transactions/transactionId/_search
这样的 URI 进行查询,这意味着您计划在每次出现新的 transactionid 时创建多个类型。现在,除了这是一个糟糕的设计之外,它甚至不可能在索引中有超过一种类型(post 版本 5.X 我猜)并且类型已从版本 7.X 。
一种解决方法是在创建时使用 transactionId 本身作为文档 ID。然后你可以通过查询 GET transactions/transactionId
来获取与一个 transactionId 关联的日志(尽管阅读文档 id 的长度限制)但这可能会导致另一个问题,即,同一个事务可以有多个日志,所以每个具有相同 ID 的日志条目都会简单地覆盖前一个条目。
这里最好的解决方案是更改查询这些记录的方式。
为此,您可以将 transactionId 作为 json 正文中的字段之一,以及插入时可能创建的时间戳(让 ES 使用自动生成的 ID 创建文档)和然后查询与事务关联的所有日志,例如:
POST transactions/_search
{
"sort": [
{
"createdDate": {
"order": "asc"
}
}
],
"query":{
"bool":{
"must":[
{
"term":{
"transactionId.keyword":"<transaction id>"
}
}
]
}
}
}
希望,这有帮助
我打算将事务日志存储在 elasticsearch 上。我是 ELK 堆栈的新手,不确定我应该如何在 ELK 堆栈上实现它。我的事务是按顺序打印日志行(upserts),而不是将它们记录到文件中,我想将它们存储在 ElastichSearch 上,稍后我将通过我创建的 transactionId 查询日志。
通常查询的URI是
/bookstore/books/_search
但在我的情况下它必须像
/transactions/transactionId/_search
因为我不想将行存储为附加到单个交易记录的数组,但我不确定这是否是在每个交易开始时创建新类型的好习惯。我什至不确定这是否可能。
关于将这些交易数据存储在 elasticsearch 上,您能提供一些建议吗?
如果您想使用 /transactions/transactionId/_search
这样的 URI 进行查询,这意味着您计划在每次出现新的 transactionid 时创建多个类型。现在,除了这是一个糟糕的设计之外,它甚至不可能在索引中有超过一种类型(post 版本 5.X 我猜)并且类型已从版本 7.X 。
一种解决方法是在创建时使用 transactionId 本身作为文档 ID。然后你可以通过查询 GET transactions/transactionId
来获取与一个 transactionId 关联的日志(尽管阅读文档 id 的长度限制)但这可能会导致另一个问题,即,同一个事务可以有多个日志,所以每个具有相同 ID 的日志条目都会简单地覆盖前一个条目。
这里最好的解决方案是更改查询这些记录的方式。
为此,您可以将 transactionId 作为 json 正文中的字段之一,以及插入时可能创建的时间戳(让 ES 使用自动生成的 ID 创建文档)和然后查询与事务关联的所有日志,例如:
POST transactions/_search
{
"sort": [
{
"createdDate": {
"order": "asc"
}
}
],
"query":{
"bool":{
"must":[
{
"term":{
"transactionId.keyword":"<transaction id>"
}
}
]
}
}
}
希望,这有帮助