2013-05-30 12 views
5

私はESでネストされたドキュメントを使用しています。私は1つのエンティティの内側に入れ子配列を持っていて、ネストされたクエリで配列をフィルタリングできるようにしたいと思います。ネストされた配列をどのようにフィルタリングするのですか?

ネストされたフィルタを使用すると、ルートドキュメントをフィルタできます。たとえば、インデックス 'blogs'を入力して 'blog'と入力し、ブログの中にプロパティ 'comments'(コメントの配列)がある場合は、 {"type": "nested"}をマッピングに使用します。 「今日」のようなタイトルを持つコメントを持つブログ(たとえば一致するクエリ)をフィルタリングすることができますが、すべてのブログではタイトルに「今日」が含まれているコメントだけを表示することもできます。

どのようにネストされたfilterworksを知っています。また、親文書の一部として応答する子文書がないため、この目的のために子 - 親関係は良好ではありません。

アプリケーションに余分なロジックを追加することなく、elasticsearchでこれを直接行う方法はありますか?これはパフォーマンスに影響する可能性がありますか? これは、次のバージョンのネストされたクエリ/フィルタなどの新しいオプションとしてこれを追加する予定ですか?ブログで

フィルタ:

 
..... 
"blogs" :[ 
    { 
     "id":1000, 
     "content":"hello world!!!", 
     "author:"evan", 
     "createTime":"2013-05-31", 
      "comments" : [ 
        {"author":"jack", id:"1", "content":"test test","createTime":"2013-05-31"}, 
        {"author":"tom", id:"2", "content":"test test","createTime":"2013-05-30"}, 
        {"author":"oliver", id:"3", "content":"test test","createTime":"2013-05-30"}, 
        {"author":"Jonesie", id:"4", "content":"test test","createTime":"2013-05-29"} 
      ] 
    }, 
    { 
     "id":1001, 
     "content":"test data", 
     "author:"jack", 
     "createTime":"2013-05-30", 
      "comments" : [ 
        {"author":"Zach", id:"11", "content":"test data 1","createTime":"2013-05-31"}, 
        {"author":"tom", id:"21", "content":"test data 2","createTime":"2013-05-31"}, 
        {"author":"oliver", id:"31", "content":"test test 3","createTime":"2013-05-28"}, 
        {"author":"Jonesie", id:"41", "content":"test test 4","createTime":"2013-05-27"} 
      ] 
    } 
] 
..... 

私のようなクエリを実行したいと思います:

おかげ

...例えば

追加は、このドキュメントを見ています。 createTime == '2013-05-31'とフィルタblogs.comments.createTime == '2013-05-31'

は期待:

 
..... 
"blogs" :[ 
    { 
     "id":1000 
     "content":"hello world!!!", 
     "author::"evan", 
     "createTime":"2013-05-31" 
      "comments" : [ 
        {"author":"jack", id:"1", "content":"test test","createTime":"2013-05-31"} 
      ] 
    } 
] 
.... 

おかげ要するに

+1

質問にテストデータを追加できますか?データ構造がどのように見えるかははっきりしていません。 – imotov

答えて

1

:あなたはできません。ネストされたドキュメントを独自のコードでフィルタリングする必要があります。

これは既知の問題です: https://github.com/elasticsearch/elasticsearch/issues/1383を「ソートクエリにネストされたドキュメントをマッチング公開し、」

:「ヒットあたりの入れ子の内側のオブジェクトに一致戻る」

https://github.com/elasticsearch/elasticsearch/issues/3022

関連する問題