>

복잡한 중첩 된 개체에서 쿼리에 대한 "쿼리"문을 래핑하는 방법을 알아낼 수 없습니다.

개념을 아래로 단순화했습니다.

같은 항목이있는 색인이 있습니다

{
"_index": "my_index",
"_type": "my_type",
"_id": "5",
"_source": {
  "group": "student",
  "user": [
    {
      "first": "Hubert",
      "last": "Rock",
      "grade": "B",
      "address": "12 Hunting St"
    }
  ]
}
}

'user'는 중첩 된 객체입니다. 이제 이름이 'Hubert'인 항목을 찾기 위해 검색을 수행하려고합니다.  'grade'및 'address'필드에 항목이없는 사람

이 작업은 별도로 수행 할 수 있습니다. ( '허버트를 모두 얻으십시오)

GET my_index/_search
{
  "query": {
    "nested": {
      "path": "user",
      "query": {
        "bool": {
          "must": [
            { "match": { "user.first": "Hubert" }}
          ]
        }
      }
    }
  }
}

( 'grade'및 'address'에 대한 값이없는 모든 항목 가져 오기)

GET my_index/_search
{
  "query": {
    "nested": {
      "path": "user",
      "query": {
       "bool": {
          "must_not": [
              {  
                "exists" : {
                  "field":"user.grade"
                  }
              },
              {  
                "exists" : {
                  "field":"user.address"
                  }
              }
          ]
        }
      }
    }
  }
}

그러나 나는 그것들을 결합하는 방법을 정말로 모른다. 어떤 아이디어?

  • 답변 # 1

    당신이 필요로하는 것은 must 를 결합하는 것입니다  그리고 must_not  아래의 단일 부울 검색어 아래에있는 조항 :

    {
      "query": {
        "nested": {
          "path": "user",
          "query": {
            "bool": {
              "must": [
                {
                  "match": {
                    "user.first": "Hubert"
                  }
                }
              ],
              "must_not": [
                {
                  "exists": {
                    "field": "user.grade"
                  }
                },
                {
                  "exists": {
                    "field": "user.address"
                  }
                }
              ]
            }
          }
        }
      }
    }
    
    

  • 이전 android - findViewById () 내에 정확한 경로를 설정하는 방법
  • 다음 xcode7.3 - 오류 - 개발자 도구 나 path가 아닌 유틸리티 "git"을 찾을 수 없습니다