쿼리를 작성하는데, != 조건으로 작성한 쿼리가 뭔가 잘못 작동하고 있었다.
index=munang ...A AND (clothes!=hoodie AND shoose!=plat) AND B...
이러한 쿼리였는데, 이 조건에 의하면 옷은 후드가 아니면서 동시에 신발이 플랫슈즈가 아닌 조건을 만족하는 데이터를 추출하는 것 이었다.
그런데 생각해보니.. AND 로 이어진 그룹 조건이다 보니, A이면서 후디도 아니고, 플랫도 아니고 B인 전체 조건이 AND로 처리되고 있었다.
그래서 이렇게 처리했다.
index=munang ...A AND NOT(clothes=hoodie AND shoose=plat) AND B...
이렇게 하다보니 문득 !=과 NOT의 차이점이 뭔지 궁금해졌다. 거의 쓰는 용도는 동일한데 말이다.
샘플 데이터를 아래의 표 라고 하자.
Location!="Calaveras Farms"
라는 조건을 넣게 되면 아래와 같은 결과가 나오게 된다.
즉, Location!="Calaveras Farms"
을 만족하는 동시에 Location값이 null인 경우도 결과에서 모두 제외된다.
NOT Location="Calaveras Farms"
조건을 넣게 되면 아래와 같은 결과가 나온다.
NOT Location="Calaveras Farms"
을 만족하는 경우만 추출된다.
정규식 쿼리를 작성할때에
| rex field=test 정규식
이런식으로 작성하게 되는데, 이때
| rex field!=test 정규식
이렇게 하게되면 정규식과 일치하지 않는 결과를 추출해준다고 한다.
당연하다. 이를 통해 이벤트를 필터링 하게 되면 전체 데이터를 모두 탐색하면서 일치하지 않는 조건인지를 봐야하기 떄문이다. 오히려 검색할 값을 표시하는 것이 탐색 범위를 줄여준다.
무냉님 잘보구 갑니다~!