2017-08-01 10 views
0

私はElasticsearchを使用してシステムの脆弱性を保存しています。 >集約、「脆弱性の数」 - - query_all検索や関連total今の私の一般的なエントリはネストされたリストのアイテムを照会する方法はありますか?

{ 
    _id: somenadomid 
    _source: { 
    "ip": "10.10.10.10", 
    "vuln_name": "v1", 
    "vuln_type": 1 
} 

である。このアプローチは、(「タイプ1のvulnとマシンの数を」クエリを簡素化する利点を持っています値、...)。

  • 情報重くdemultipliedです:

    それはasloは特に欠点を持っている一つのホストについての情報は、すべての脆弱性

  • コピーされそこに脆弱性と同じくらい多くの行があり、ないホスト(50倍
  • 天然の容器は「脆弱」ではなく「宿主」であり、より簡単に更新、削除などが可能です。

そこで私は、「ホスト」ベース1に方式を変更検討しています:私はに実行している問題は、私はまだ根本的な脆弱性を照会し、「爆発」する方法がわからないということです

{ 
    _id: machine1 
    _source: { 
    "ip": "10.10.10.10", 
    "vuln": [ 
     { 
      "name": "v1", 
      "type": 1 
     }, 
     { 
      "name": "v2", 
      "type": 1 
     } 
     ] 
} 

それらはクエリ内にあります。タイプ1のいくつかのvulnsがあることができます - 具体的に(私は私の問題は、クエリのこのファミリーの周りに引き寄せられるだろうと考えている)、私は

  • type 1の脆弱性の総数(ないホストを照会することができますどのように

    ホストごとのエントリを取得します)

  • 上記のものと同じですが、脆弱性名(「nameの「Microsoft」を含むtype 1の脆弱性の数)フィルタリングは、ホストではなく、脆弱性の機能上にあります)

答えて

1

単純な概要を与えるには、 Elasticsearchでは、ネストされたデータを管理する2つの方法があります。完全に異なるシーンの背後にある入れ子オブジェクトまたは内部オブジェクトを使用できます。

ネストされたタイプは、オブジェクトの配列の索引付けおよび相互に独立した問合せを可能にするオブジェクト・データ型の特殊バージョンです。

  • ネストされたドキュメントは、読み出し/クエリのパフォーマンスを助ける互いに同じLuceneのブロックに格納されます。

    ネストされたドキュメントの読み取りは、同等の親/子よりも高速です。

    ネストされたドキュメント(親またはネストされた子)の1つのフィールドを更新すると、ESはネストされたドキュメント全体の再インデックスを強制します。これは、頻繁に

内部オブジェクトは、親ドキュメント内に埋め込まれたオブジェクトで変更されないデータのための 最適です不可能です 「相互参照」ネストした文書大型ネストされたドキュメントのために非常に高価になることができます。

  • 簡単に、1対1の関係 が

は詳細については内部オブジェクトの違いを次のリンクを見ていてください。ネストされた特別なクエリの必要性を全く維持されていない場合にのみ適用可能、高速なパフォーマンスおよびネストされたオブジェクトです。

クエリ:https://www.elastic.co/guide/en/elasticsearch/guide/master/nested-objects.html

集計: https://www.elastic.co/guide/en/elasticsearch/guide/current/nested-aggregation.html

照会するためと集計(合計数を取得する)では

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

は、以下のリンクを見てい