2017-05-29 6 views
1

ユーザーIDが一致するため。みとめquery_strings(ネストされたとネストしていない)

私の現在のクエリは次のようになります。

{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "nested": { 
      "path": "members", 
      "score_mode": "none", 
      "query": { 
       "bool": { 
       "filter": [ 
        { "match": { "members.id": "123456789" } } 
       ] 
       } 
      } 
      } 
     }, 
     { 
      "nested": { 
      "path": "members", 
      "query": { 
       "bool": { 
       "must": { 
        "simple_query_string": { 
        "query": "Rhymen", 
        "fields": ["members.fullName"] 
        } 
       } 
       } 
      } 
      } 
     } 
     ] 
    } 
    } 
} 

私は1つのクエリでのメンバーとスレッド名をフィルタリングすることができますか私は2つの別々のクエリをマージする必要がありますか?私は "minimum_should_match:1"で "should"を追加しようとしましたので、入れ子になっていない "query_string"を追加することができました。しかし、それは期待どおりに機能しませんでした(スコアはかなりねじ込みました)。

答えて

1

これはうまくいくと思います。

両方のフィルタでfilter memberIdの懸念を払わなければなりません。ネストされたフィルタでは、ユーザをmemberIdおよびnameと照合する必要があります。

{ 
    "query": { 
     "bool": { 
      "must": [{ 
        "nested": { 
         "path": "members", 
         "query": { 
          "term": { 
           "members.memberId": { 
            "value": 1 
           } 
          } 
         } 
        } 
       }, 
       { 
        "bool": { 
         "should": [{ 
           "term": { 
            "name": { 
             "value": "thread_name" 
            } 
           } 
          }, 
          { 
           "nested": { 
            "path": "members", 
            "query": { 
             "bool": { 
              "should": [{ 
                "term": { 
                 "members.fullName": { 
                  "value": "trump" 
                 } 
                } 
               }, 
               { 
                "term": { 
                 "members.memberId": { 
                  "value": 1 
                 } 
                } 
               } 
              ] 
             } 
            } 
           } 
          } 
         ] 
        } 
       } 
      ] 
     } 
    } 
} 
関連する問題