gpt4 book ai didi

elasticsearch - 在Elasticsearch中将数字用作类型

转载 作者:行者123 更新时间:2023-12-02 23:11:30 24 4
gpt4 key购买 nike

我将在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com