在 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>"
          }
        }
        ]
    }
  }
}

希望,这有帮助