我将在 flex 搜索上存储事务日志。我是ELK堆栈的新手,不确定如何在ELK堆栈上实现此功能。我的事务是按顺序打印日志行(upserts),而不是将它们记录到文件中,我想将它们存储在ElastichSearch上,稍后我将通过创建的transactionId查询日志。

通常,用于查询的URI为

/ bookstore / books / _search

但就我而言,它一定像

/ transactions / transactionId / _search

因为我不想将行存储为附加到单个交易记录的数组,但是我不确定这是否是在每个交易开始时创建新类型的好习惯。我什至不确定这是否可行。

您可以提供有关在Elasticsearch上存储这些交易数据的建议吗?

最佳答案

如果您要使用/transactions/transactionId/_search这样的URI进行查询,则意味着您计划每次使用新的transactionid时都创建多种类型。现在,除了这是一个糟糕的设计之外,它甚至不可能在索引中拥有多个类型(我猜是在5.X之后的版本),并且从7.X版本开始,类型已经被完全删除。
一种解决方法是在创建时是否将transactionId本身用作文档ID。然后,您可以通过查询GET transactions/transactionId(尽管了解有关文档ID的长度限制)来获取与一个transactionId关联的日志,但这可能会引起另一个问题,即同一事务可能有多个日志,因此每个日志条目都具有相同的ID只会覆盖先前的条目。
最好的解决方案是更改查询这些记录的方式。

为此,您可以将transactionId作为json主体中的字段之一,以及在插入时可能创建的时间戳记(让ES使用自动生成的ID创建文档),然后查询与事务相关的所有日志,例如:

POST transactions/_search
{
   "sort": [
    {
      "createdDate": {
        "order": "asc"
      }
    }
  ],
   "query":{
    "bool":{
      "must":[
        {
          "term":{
            "transactionId.keyword":"<transaction id>"
          }
        }
        ]
    }
  }
}

希望这可以帮助

关于elasticsearch - 在Elasticsearch中将数字用作类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59784831/

10-12 23:50