首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >elasticsearch -如何组合来自两个索引的结果

elasticsearch -如何组合来自两个索引的结果
EN

Stack Overflow用户
提问于 2022-06-09 04:19:21
回答 1查看 213关注 0票数 0

我有如下格式的弹性搜索的CDR日志条目。在创建这个文档时,我将没有关于delivery_status字段的信息。

代码语言:javascript
复制
{
  msgId: "384573847",
  msgText: "Message text to be delivered"
  submit_status: true,
  ...
  delivery_status: //comes later
}

稍后,当交付状态可用时,我可以更新此记录。

但是我已经看到更新查询降低了摄入的速度。使用使用大容量操作的纯插入,我可以达到多达3000个或更多事务/sec,但是如果结合更新,摄入速度会变得非常慢,并且以100或更少的txns/秒的速度爬行。

因此,我想我可以创建另一个索引,如下面所示,将交付状态与msgId一起存储起来:

代码语言:javascript
复制
{
  msgId:384573847,
  delivery_status: 0
}

通过这种方法,我最终得到了2个索引(类似于RDBMS中的主细节表)。是否有方法通过加入这些索引来查询记录?我听说过别名,但不能完全理解它的概念以及它是否可以应用到我的用例中。

感谢任何人帮我提建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-09 05:29:32

如前所述,可以在单独的索引中对文档进行索引,并使用Elasticsearch的崩溃功能,并检索这两个文档。

考虑一下,您在index2index3中都有索引文档,并且都有通用的msgId,然后您可以使用以下查询:

代码语言:javascript
复制
POST index2,index3/_search
{
  "query": {
    "match_all": {}
  },
  "collapse": {
    "field": "msgId",
    "inner_hits": {
      "name": "most_recent",
      "size": 5
    }
  }
}

但是,您需要考虑使用大型数据集查询性能。您可以做一些基准测试Evalue查询性能,并决定索引或查询时间将更好。

关于别名,目前在上面的查询中我们提供index2,index3作为索引名。(逗号分开)。但是,如果使用别名,则可以使用单一的统一名称对两个索引进行查询。

可以使用以下命令将两个索引添加到单个别名:

代码语言:javascript
复制
POST _aliases
{
  "actions": [
    {
      "add": {
        "index": "index3",
        "alias": "order"
      }
    },
    {
      "add": {
        "index": "index2",
        "alias": "order"
      }
    }
  ]
}

现在,您可以使用下面的查询,并在索引名称的别名中使用:

代码语言:javascript
复制
POST order/_search
{
  "query": {
    "match_all": {}
  },
  "collapse": {
    "field": "msgId",
    "inner_hits": {
      "name": "most_recent",
      "size": 5
    }
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72554697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档