2016-11-21 3 views
0

プレートフォームというネストされたオブジェクトを持つ弾性検索インデックスがあります。そのサブ文書の数はこのように、変えることができ:今ネストされたドキュメントの長さが数値と一致するドキュメントを取得するフィルタ

{ 
    "action" : "clean", 
    "plateformes" : [ 
    { 
     "plateforme" : "myplateforme1", 
     "status" : "failure" 
    }, 
    { 
     "plateforme" : "myplateforme2", 
     "status" : "succes" 
    }, 
    { 
     "plateforme" : "myplateforme3", 
     "status" : "succes" 
    } 
    ] 
}, 
{ 
    "action" : "activate", 
    "plateformes" : [ 
    { 
     "plateforme" : "myplateforme1", 
     "status" : "failure" 
    }, 
    { 
     "plateforme" : "myplateforme2", 
     "status" : "succes" 
    } 
    ] 
}, 
{ 
    "action" : "delete", 
    "plateformes" : [ 
    { 
     "plateforme" : "myplateforme1", 
     "status" : "succes" 
    } 
    ] 
} 

、私はplateformesは正確に(さんが言わせて)ネストされた書類を持っている文書のみを取得したいです。上記の例では、クエリはこのドキュメントのみを返す必要があります:

{ 
    "action" : "delete", 
    "plateformes" : [ 
    { 
     "plateforme" : "myplateforme1", 
     "status" : "succes" 
    } 
    ] 
} 

これを行う方法はありますか?

+0

あなたは、あなたの文書が含まれていplatformesの数を格納しているインデックスの時に別のフィールド 'plateformesCount'を追加することができます。それで、そのフィールドをいくつかの数、すなわち非常に高速で比較することだけが問題になります。 – Val

+0

ありがとうございました。私はこのやり方をとてもよく理解しています。しかし、私は指数の作成に手を差し伸べていません。私は対処しなければならない、またはそれを行う方法が他にないことを確かめなければならない。助けてくれてありがとう –

+0

削除された答えに示唆したようにすることができますが、 'doc.platformes'の代わりに' _source.plateformes.size()== 1'を使うとうまくいくはずです。パフォーマンスが損なわれる可能性があることにご注意ください。 – Val

答えて

0

platformesの番号を格納するインデックス時に別のフィールドplateformesCountを追加することができます。それで、そのフィールドをいくつかの数、すなわち非常に高速で比較することだけが問題になります。

{ 
    "action" : "clean", 
    "plateformesCount": 3, 
    "plateformes" : [ 
    { 
     "plateforme" : "myplateforme1", 
     "status" : "failure" 
    }, 
    { 
     "plateforme" : "myplateforme2", 
     "status" : "succes" 
    }, 
    { 
     "plateforme" : "myplateforme3", 
     "status" : "succes" 
    } 
    ] 
}, 
{ 
    "action" : "activate", 
    "plateformesCount": 2, 
    "plateformes" : [ 
    { 
     "plateforme" : "myplateforme1", 
     "status" : "failure" 
    }, 
    { 
     "plateforme" : "myplateforme2", 
     "status" : "succes" 
    } 
    ] 
}, 
{ 
    "action" : "delete", 
    "plateformesCount": 1, 
    "plateformes" : [ 
    { 
     "plateforme" : "myplateforme1", 
     "status" : "succes" 
    } 
    ] 
} 
関連する問題