2022년 8월 28일 일요일

null과 empty

null과 empty의 차이는 미묘하다. 다음은 null(필드 X)과 empty 값을 포함한 param 필드.


다음은 null을 제외한 param 필드 검색 결과. empty, 즉 비어있는 값이 검색 결과에 포함된다.


null 검색 결과에 empty는 포함되지 않는다. 존재하지 않는 필드만을 null로 인식한다는 얘기.


empty를 검색 결과에서 제외하려면 정규표현식을 사용해야 한다.


1개 이상을 검사하는 수량자 +와 0개도 검사할 수 있는 *의 차이에 주의.


엘라스틱도 마찬가지

샘플 데이터 입력.
PUT _bulk
{"index": {"_index": "test"}}
{"url": "a.php","param": "a=b"}
{"index": {"_index": "test"}}
{"url": "b.php","param": ""}
{"index": {"_index": "test"}}
{"url": "c.php"}


다음은 값이 존재하는 param 필드 검색 결과. empty가 포함된다.


필드가 존재하는 한 empty도 존재하는 값이라는 얘기.


검색 결과에서 empty를 제외하려면 엘라스틱도 정규표현식을 사용해야 하며, empty 값은 인덱싱이 되지 않기 때문에 수량자 *을 사용해도 자연스럽게 검색 결과에서 제외된다.


수량자의 차이를 비교하려면 인덱싱을 하지 않는 키워드 필드를 사용하면 됨.



값이 없는 empty 필드가 만들어지면 골치 아픈 상황이 벌어질 수 있다. 처음부터 만들지 않는 게 상책.

댓글 없음:

댓글 쓰기

크리에이티브 커먼즈 라이선스