elasticsearch 在Elasticsearch中使用数字作为类型,elasticsearch,logstash,kibana,elastic-stack,elasticsearch,Logstash,Kibana,Elastic Stack" /> elasticsearch 在Elasticsearch中使用数字作为类型,elasticsearch,logstash,kibana,elastic-stack,elasticsearch,Logstash,Kibana,Elastic Stack" />

elasticsearch 在Elasticsearch中使用数字作为类型

elasticsearch 在Elasticsearch中使用数字作为类型,elasticsearch,logstash,kibana,elastic-stack,elasticsearch,Logstash,Kibana,Elastic Stack,我将在elasticsearch上存储事务日志。我对ELK stack还不熟悉,不确定该如何在ELK stack上实现这一点。我的事务是按顺序打印日志行(upserts),而不是将它们记录到文件中,我希望将它们存储在ElastichSearch上,稍后我将根据我创建的transactionId查询日志 通常,用于查询的URI是 /书店/书籍/\u搜索 但在我的情况下,一定是这样 /事务/transactionId/\u搜索 因为我不想将行存储为附加到单个事务记录的数组,但我不确定在每个事务开始时

我将在elasticsearch上存储事务日志。我对ELK stack还不熟悉,不确定该如何在ELK stack上实现这一点。我的事务是按顺序打印日志行(upserts),而不是将它们记录到文件中,我希望将它们存储在ElastichSearch上,稍后我将根据我创建的transactionId查询日志

通常,用于查询的URI是

/书店/书籍/\u搜索

但在我的情况下,一定是这样

/事务/transactionId/\u搜索

因为我不想将行存储为附加到单个事务记录的数组,但我不确定在每个事务开始时创建新类型是否是一种好的做法。我甚至不确定这是否可能


您能给出关于在elasticsearch上存储这些事务数据的建议吗?

如果您想使用类似于
/transactions/transactionId/\u 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>"
          }
        }
        ]
    }
  }
}
POST-transactions/\u-search
{
“排序”:[
{
“createdDate”:{
“订单”:“asc”
}
}
],
“查询”:{
“布尔”:{
“必须”:[
{
“期限”:{
“transactionId.keyword”:”
}
}
]
}
}
}

希望,这会有所帮助

我将只使用一个节点,并且对使用json中的字段进行查询有一些顾虑。假设一台商品服务器存储1000万条记录,查询一个transactionId的平均时间是多少?您是否有任何与此案例的性能相关的链接可以转发给我?我想,使用json搜索体的搜索实际上比单独使用uri查询要慢,但是ES是用来处理此类搜索的。以下是有关搜索查询性能的一些参考: