elasticsearch 在Elasticsearch中使用数字作为类型
我将在elasticsearch上存储事务日志。我对ELK stack还不熟悉,不确定该如何在ELK stack上实现这一点。我的事务是按顺序打印日志行(upserts),而不是将它们记录到文件中,我希望将它们存储在ElastichSearch上,稍后我将根据我创建的transactionId查询日志 通常,用于查询的URI是 /书店/书籍/\u搜索 但在我的情况下,一定是这样 /事务/transactionId/\u搜索 因为我不想将行存储为附加到单个事务记录的数组,但我不确定在每个事务开始时创建新类型是否是一种好的做法。我甚至不确定这是否可能
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上存储这些事务数据的建议吗?如果您想使用类似于
/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是用来处理此类搜索的。以下是有关搜索查询性能的一些参考: