首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何查询嵌套列表中的项?

如何查询嵌套列表中的项?
EN

Stack Overflow用户
提问于 2017-08-01 08:27:03
回答 1查看 915关注 0票数 0

我使用Elasticsearch来存储系统漏洞。现在我的典型条目是

代码语言:javascript
复制
{
  _id: somenadomid
  _source: {
     "ip": "10.10.10.10",
     "vuln_name": "v1",
     "vuln_type": 1
}

这种方法具有简化查询的优点(“带有1类型->的计算机数目”,“聚合”,“漏洞数量”- query_all搜索和相关的total值,.)。

它也有缺点,特别是:

  • 该信息被严重破译:有关一个主机的信息被复制到所有漏洞上。
  • 漏洞和漏洞一样多,而不是主机(平均多50倍)。
  • 自然容器是“宿主”而不是“漏洞”--它可以更容易地更新、删除等等。

因此,我现正考虑将计划改为“主机”基准:

代码语言:javascript
复制
{
  _id: machine1
  _source: {
     "ip": "10.10.10.10",
     "vuln": [
         {
             "name": "v1",
             "type": 1
         },
         {
             "name": "v2",
             "type": 1
         }
      ]
}

我遇到的问题是,我仍然从根本上查询漏洞,并且不知道如何在查询中“引爆”漏洞。

具体来说(我相信我的问题会被这个系列的查询所吸引),我如何去查询?

  • type 1的漏洞总数(不是主机--每个主机可以有几个1类型的秃鹫,基本查询将检索作为主机的条目)
  • 与上述相同,但对漏洞名称进行了一些筛选(“type 1在name中使用"Microsoft”的漏洞数量)--过滤是针对漏洞的特性而不是针对主机)。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-01 09:19:52

为了给您一个简单的概述,在Elasticsearch中您有两种方法来管理嵌套数据,您可以使用嵌套对象或内部对象,在场景后面它们是完全不同的。

嵌套类型是对象数据类型的专门版本,它允许对对象数组进行独立的索引和查询。

  • 嵌套的文档存储在相同的Lucene块中,这有助于提高读取/查询性能。 读取嵌套的文档比等效的父/子文档更快。 更新嵌套文档(父文档或嵌套子文档)中的单个字段会迫使ES重新索引整个嵌套文档。对于大型嵌套文档“交叉引用”嵌套文档来说,这是非常昂贵的,这不可能最适合于不频繁更改的数据。

内部对象是嵌入在父文档中的对象。

  • 简单、快速、只适用于维护一对一关系时不需要嵌套特殊查询的情况

有关内部对象和嵌套对象之间的差异的进一步信息,请查看下面的链接。

https://www.elastic.co/blog/managing-relations-inside-elasticsearch

为了查询和聚合(获取总数),请查看以下链接:

查询:https://www.elastic.co/guide/en/elasticsearch/guide/master/nested-objects.html

聚合:https://www.elastic.co/guide/en/elasticsearch/guide/current/nested-aggregation.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45432661

复制
相关文章

相似问题

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