본문 바로가기

Elasticsearch

[elasticsearch] 필드 값이 존재하지않는 경우 query 만들기

반응형

 

Elasticsearch 에서 특정 field 값이 존재하지 않는 데이터를 찾을 때 쓰는 query 정리 

 

 

exists 사용하기 

GET test_index/_search 
{
  "query": {
    "constant_score": { // 이것도 함께 써주어야 오류가 안 난다. 
        "filter": {
          "exists": {
            "field": "name"  // "field" : "필드명" 적어주기 
          }    
        }
      }
  }
}

이렇게 exists를 사용하면 해당 필드 (위에서는 "name") 이 존재하는 데이터만 추려서 보여준다. 

 

 

만약 type이 "nested"인 경우 query에 nested 추가하기

GET test_index/_search 
{
  "query": {
    "nested": {
      "path": "countries",
      "query": {
        "constant_score": {
          "filter": {
            "exists": {
              "field": "countries" // 각 안의 속성들이 있는지 찾으려면 countries.name 방식으로 ㄱ
          }    
        }
      }
    }
    }
  }
}

 

 

특정 값인 경우 찾을 때

: filter 로 거르고 match로 매칭해서 찾기 

 

GET test_index/_search
{
  "query": {
    "bool": {
      "must": {
        "match": {
          "name": "홍길동"
        }
      },
    "filter": {
      "match": {
        "isHuman": true
      }
    }
  }
  }
}

 

위와 같이 "bool" : {  "must": { } , "filter": { } } query로 검색할 수 있다. "name" 필드가 "홍길동" 이어야 하고 (비슷해도 찾음) "isHuman" 필드가 *반드시* true 인 데이터를 찾아온다. 

 

filter는 true or false 처럼 o / x 인 값을 필터할 때 사용되고 must - match 는 비슷한 값이면 다 찾아온다고 한다!

 

반응형