elasticsearch는 schema-less 아키텍처라 특정 필드가 존재하는지 확인할 필요가 있다. 

그 때는 exists 필터를 사용할 수 있다.  아래와 같이 요청하면 전체 다큐먼트 중, url 필드가 존재하는 다큐먼트를 검색한다. 


curl -XPOST 'http://127.0.0.1:9200/blog/comment/_search?pretty=true' -d '{

  "query": {

    "filtered": {

      "filter": {

        "exists": {

          "field":"url"

        }

      },

      "query": {

        "match_all": {}

      }

    }

  }

}'



exists 필터와 반대로 없는 것만 얻고 싶으면 missing 필터를 사용한다.


curl -XPOST 'http://127.0.0.1:9200/blog/comment/_search?pretty=true' -d '{

  "query": {

    "filtered": {

      "filter": {

        "missing": {

          "field":"url"

         }

       },

       "query": {

         "match_all": {}

       }

     }

  }

}'





exists와 missing 필터는 확인할 필드 이름으로 field 매개변수만을 받는다.

만약 임베디드 객체 또는 임베디드 객체의 목록을 사용하고 있다면, 하위 객체 필드를 같이 사용할 수 있다. 

Posted by '김용환'
,