我有如下格式的弹性搜索的CDR日志条目。在创建这个文档时,我将没有关于delivery_status字段的信息。
{
msgId: "384573847",
msgText: "Message text to be delivered"
submit_status: true,
...
delivery_status: //comes later
}稍后,当交付状态可用时,我可以更新此记录。
但是我已经看到更新查询降低了摄入的速度。使用使用大容量操作的纯插入,我可以达到多达3000个或更多事务/sec,但是如果结合更新,摄入速度会变得非常慢,并且以100或更少的txns/秒的速度爬行。
因此,我想我可以创建另一个索引,如下面所示,将交付状态与msgId一起存储起来:
{
msgId:384573847,
delivery_status: 0
}通过这种方法,我最终得到了2个索引(类似于RDBMS中的主细节表)。是否有方法通过加入这些索引来查询记录?我听说过别名,但不能完全理解它的概念以及它是否可以应用到我的用例中。
感谢任何人帮我提建议。
发布于 2022-06-09 05:29:32
如前所述,可以在单独的索引中对文档进行索引,并使用Elasticsearch的崩溃功能,并检索这两个文档。
考虑一下,您在index2和index3中都有索引文档,并且都有通用的msgId,然后您可以使用以下查询:
POST index2,index3/_search
{
"query": {
"match_all": {}
},
"collapse": {
"field": "msgId",
"inner_hits": {
"name": "most_recent",
"size": 5
}
}
}但是,您需要考虑使用大型数据集查询性能。您可以做一些基准测试Evalue查询性能,并决定索引或查询时间将更好。
关于别名,目前在上面的查询中我们提供index2,index3作为索引名。(逗号分开)。但是,如果使用别名,则可以使用单一的统一名称对两个索引进行查询。
可以使用以下命令将两个索引添加到单个别名:
POST _aliases
{
"actions": [
{
"add": {
"index": "index3",
"alias": "order"
}
},
{
"add": {
"index": "index2",
"alias": "order"
}
}
]
}现在,您可以使用下面的查询,并在索引名称的别名中使用:
POST order/_search
{
"query": {
"match_all": {}
},
"collapse": {
"field": "msgId",
"inner_hits": {
"name": "most_recent",
"size": 5
}
}
}https://stackoverflow.com/questions/72554697
复制相似问题