2016-09-03 3 views
0

I '銀行Elasticsearchは、ドキュメント内の配列フィールドのために正確に照会に失敗

[ 
    { 
     "_id": "1", 
     "name": "ICIC", 
     "balance": "$2,574.27", 
     "friends": [ 
      { 
       "roleid": 0, 
       "name": "Alana Shepard", 
       "isactive": true 
      }, 
      { 
       "roleid": 1, 
       "name": "Katheryn Hatfield", 
       "isactive": false 
      } 
     ] 
    }, 
    { 
     "_id": "2", 
     "name": "SBK", 
     "balance": "$2,346.44", 
     "friends": [ 
      { 
       "roleid": 0, 
       "name": "Hinton Kaufman", 
       "isactive": true 
      }, 
      { 
       "roleid": 1, 
       "name": "Miles Alford", 
       "isactive": true 
      } 
     ] 
    } 
] 

呼ばelasticsearchタイプで、以下のデータは、今私は、ドキュメントfriends.roleid = 1や友人をフェッチしようとしてい.isactive = true。次のように要求されたDSLクエリは結果が期待

{ 
    "query": { 
     "bool": { 
      "must": [ 
       { 
        "term": { 
         "friends.roleid": { 
          "value": 1 
         } 
        } 
       }, 
       { 
        "term": { 
         "friends.isactive": { 
          "value": true 
         } 
        } 
       } 
      ] 
     } 
    } 
} 

、ある_id = 2を持つオブジェクトです。しかし実際の結果は、_id = 1と_id = 2の両方であった。誰かがDSLクエリの問題点を見つけるのを助けてくれたら大変感謝しています。ありがとう

+0

あなたの 'friends'フィールドを' nested'型として宣言する必要があります。理由:https://www.elastic.co/guide/en/elasticsearch/guide/2.x/nested-objects.html – Val

+0

Val同じリクエストでネストされたクエリと通常のDSLクエリを書き込むにはどうすればよいですか? –

+0

'bool/must'を使って、' term'クエリを入れ子にしたのと同じ方法で組み合わせることができます。 – Val

答えて

1

この問題は、フィールド "friends"をネストされたオブジェクトにすることで修正されました。次のようにDSLのクエリが再構築され、DSLクエリで

{ 
    "query": { 
     "nested": { 
      "path": "friends", 
      "query": { 
       "bool": { 
        "must": [ 
         { 
          "term": { 
           "friends.roleid": { 
            "value": 1 
           } 
          } 
         }, 
         { 
          "term": { 
           "friends.isactive": { 
            "value": "true" 
           } 
          } 
         } 
        ] 
       } 
      } 
     } 
    } 
} 

パスは、ネストされたオブジェクトを指定します。 elasticsearchのドキュメント参照https://www.elastic.co/guide/en/elasticsearch/guide/current/nested-query.htmlは多くの助けになります。

関連する問題